none
Mvc Tek Sayfadan Tüm İlişkili Tablolara Veri Aktarma ve Listeleme RRS feed

  • Soru

  • Merhabalar, geçtiğimiz günlerde resim'i byte olarak çağırmayı göstermişti Önay Hocam. Şimdi ise tek bir sayfadan ilişkili diğer tablolara veri kayıdı yapma ve listeleme sayfasında ise bu ilişkili tablolardaki veriyi çağırmak istiyorum ancak bir viewde tek bir ef sınıfı tanımlanabiliyor, diğer sınıfı tanımlamaya çalıştığımda hata alıyorum. Zaten diğer sınıfı da çağırmış olsam listelemede vs bir sıkıntı yaşamayacağım aslında, velhasıl kelam tek sayfada birden fazla veritabanı tablosunu nasıl listeler nasıl insert ederim? Şimdiden teşekkür ediyorum, iyi kodlamalar :)
    29 Kasım 2019 Cuma 04:04

Yanıtlar

  • Merhaba, sana gösterdiğim örnekte zaten bu mümkün. Örneğin;
    view'e Genre den bir instance yolladığında, aslında ilişkili Album kolleksiyonunu da yolluyorsun.

    public ViewResult Genre(int? Id)
    {
       return View(_context.Genres.Find(Id));
    }

    ile türü gönderip view'de;

    @model Genre
    
    
    @foreach(var album in Model.Albums)
    {
       <tr>
         <td>@Album.Name</td>
         <td>@Album.Price.ToString("c2")</td>
       </tr>
    }
     

    şeklinde ilişkli kayıtları listeleyebilirsin. Eğer aynı view'de Album ekleyen bir form var ise;

    @using(Html.BeginForm("Create", "Albums"))
    {
       ....
    }
    şeklinde Albums controllerindeki Create actionunda ekletebilirsin.


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com

    • Yanıt Olarak İşaretleyen Utku Uludağ 8 Aralık 2019 Pazar 02:41
    29 Kasım 2019 Cuma 07:01
    Moderatör
  • Aynen one-to-many ilişkiyi tanımlamamışsın.

    modelBuilder.Entity<Stock>()
    .HasMany(p=>p.Properties)
    .WithRequired(p=>p.Stock)
    .HasForeignKey(p=>p.StockId);
       
    modelBuilder.Entity<Stock>()
    .HasMany(p=>p.Images)
    .WithRequired(p=>p.Stock)
    .HasForeignKey(p=>p.StockId);


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com

    • Yanıt Olarak İşaretleyen Utku Uludağ 29 Kasım 2019 Cuma 12:06
    29 Kasım 2019 Cuma 11:45
    Moderatör

Tüm Yanıtlar

  • Merhaba, sana gösterdiğim örnekte zaten bu mümkün. Örneğin;
    view'e Genre den bir instance yolladığında, aslında ilişkili Album kolleksiyonunu da yolluyorsun.

    public ViewResult Genre(int? Id)
    {
       return View(_context.Genres.Find(Id));
    }

    ile türü gönderip view'de;

    @model Genre
    
    
    @foreach(var album in Model.Albums)
    {
       <tr>
         <td>@Album.Name</td>
         <td>@Album.Price.ToString("c2")</td>
       </tr>
    }
     

    şeklinde ilişkli kayıtları listeleyebilirsin. Eğer aynı view'de Album ekleyen bir form var ise;

    @using(Html.BeginForm("Create", "Albums"))
    {
       ....
    }
    şeklinde Albums controllerindeki Create actionunda ekletebilirsin.


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com

    • Yanıt Olarak İşaretleyen Utku Uludağ 8 Aralık 2019 Pazar 02:41
    29 Kasım 2019 Cuma 07:01
    Moderatör
  • Merhaba, sana gösterdiğim örnekte zaten bu mümkün. Örneğin;
    view'e Genre den bir instance yolladığında, aslında ilişkili Album kolleksiyonunu da yolluyorsun.

    public ViewResult Genre(int? Id)
    {
       return View(_context.Genres.Find(Id));
    }

    ile türü gönderip view'de;

    @model Genre
    
    
    @foreach(var album in Model.Albums)
    {
       <tr>
         <td>@Album.Name</td>
         <td>@Album.Price.ToString("c2")</td>
       </tr>
    }
     

    şeklinde ilişkli kayıtları listeleyebilirsin. Eğer aynı view'de Album ekleyen bir form var ise;

    @using(Html.BeginForm("Create", "Albums"))
    {
       ....
    }
    şeklinde Albums controllerindeki Create actionunda ekletebilirsin.


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com

    Aslında sizin de söylediğiniz gibi sizin örneğinizde dediğiniz gibi çalışıyor. Ben yeni bir proje oluşturup sizin yaptıklarınızı öğrenmek adına tekrardan yaptım. İlişkilendirmelerden dolayı sizde tüm tabloların geldiğini bende iste ilişkilerden dolayı gelmediğini düşünüyorum açıkçası. 3 tablom var birisi resimleri tutarken diğer ikisi isim ve stok numarasını tutuyor. StokId ise diğer iki tablonun gerekli foreign alanına ekleniyor. Sayfalarımda ise stok numarasını ve idsini alarak işlem yapmaya çalıştığımda fotoğraf ve isimler tablosu sizin gösterdiğiniz şekilde gelmiyor. Bu contextde yazmış olduğum ilişkilendirmelerden olabilir mi acaba?

    Kodlarım ise;

    public class Stock
    {
        public int Id { get; set; }
        public string StockNumber { get; set; }

        public virtual ICollection<Image> Parts { get; set; }
        public virtual ICollection<Property> Properties { get; set; }
    }

    public class Property
    {
        public int Id { get; set; }
        public int StockId { get; set; }
        public string Name { get; set; }

        public virtual Stock Stock { get; set; }
    }
    public class Image
    {
        public int Id { get; set; }
        public int StockId { get; set; }
        public byte[] Image { get; set; }

        public virtual Stock Stock { get; set; }
    }

    Modelleri oluşturduğum kısım;

     base.OnModelCreating(modelBuilder);

        modelBuilder.Entity<Part>()
            .Property(e => e.PartNumber)
            .IsUnicode(false);

        modelBuilder.Entity<Property>()
            .Property(e => e.Name)
            .IsUnicode(false);

        modelBuilder.Entity<Stock>()
            .Property(e => e.StockNumber)
            .IsUnicode(false);

    Şeklinde

    @model Stock
    
    
    @foreach(var album in Model.Stock)
    {
       <tr>
         <td>@Stock.StockNumber</td>
         <td>@Property.Name("c2")</td>
       </tr>
    }

    Sizin gösterdiğiniz şekilde stoğumu doğru bir şekilde getirirken hemen altında tanımladığım Property.Name kısmında isimlere ulaşamıyorum. Bunun nedeni contexte oluşturduğum ilişkilerden dolayı mı acaba?

    29 Kasım 2019 Cuma 11:13
  • Aynen one-to-many ilişkiyi tanımlamamışsın.

    modelBuilder.Entity<Stock>()
    .HasMany(p=>p.Properties)
    .WithRequired(p=>p.Stock)
    .HasForeignKey(p=>p.StockId);
       
    modelBuilder.Entity<Stock>()
    .HasMany(p=>p.Images)
    .WithRequired(p=>p.Stock)
    .HasForeignKey(p=>p.StockId);


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com

    • Yanıt Olarak İşaretleyen Utku Uludağ 29 Kasım 2019 Cuma 12:06
    29 Kasım 2019 Cuma 11:45
    Moderatör
  • Aynen one-to-many ilişkiyi tanımlamamışsın.

    modelBuilder.Entity<Stock>()
    .HasMany(p=>p.Properties)
    .WithRequired(p=>p.Stock)
    .HasForeignKey(p=>p.StockId);
       
    modelBuilder.Entity<Stock>()
    .HasMany(p=>p.Images)
    .WithRequired(p=>p.Stock)
    .HasForeignKey(p=>p.StockId);


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com

    Evet bir sorun olduğunu biliyordum ama nerde olduğunu görememiştim bir türlü. Çok teşekkür ediyorum tekrardan, iyi kodlamalar :)
    29 Kasım 2019 Cuma 12:06