none
Liste Halinde veri kaydetme RRS feed

  • Genel Tartışma

  • Merhaba, aslında buna benzer bir soruyu daha önce sormuştum ancak cevaplanmasına rağmen pek bir ilerleme kaydedemedim. O nedenle hazır yeri gelmişken sormak daha anlaşılır biçimde sormak istedim.

    Yukarıda gördüğünüz formda seanslar tabloma veri ekleyeceğim her seansa ait birden fazla saat bilgisi olabilir. Ekle butonuna basıldıkça eklenen başlangıç ve bitiş saatlerini listeleyeceğim sonrada kaydete basılınca önce seanslar tablosuna kayıt yapılacak daha sonra bu kaydın id'sini alınıp seanssaatleri tablosuna kırmızı alan içersinde listelenen veriler kaydedilecek. Kurduğum mantık bu. Yapamadığım kısmı ekle butonunun olduğu bölüm nasıl bir liste oluşturup ekle butonu ile bu listeye item ekliycem ve bu listeyi seans tablosuna kayıt yapıldıktan sonra yapılan kaydın ıd sini alıp seanssaatleri tablosundaki seansıd kolonuna kaydedicem tabi birde ekle butonu ile oluşturmuş olduğum listeyide seanssaatleri tablosuna eklemem lazım


    eneskarakara[at]gmail[nokta]com

    12 Ekim 2016 Çarşamba 01:17

Tüm Yanıtlar

  • Zaten sorunun içinde cevabı vermişsin. En basit yolla anlatmak istiyorum daha farklı şekilleri de vardır. İlk olarak seanslar ve saatleri için modellerini oluşturman gerek. Daha sonra seans modelinin altına list ile saatleri koymalısın. Sonra view tarafında eklenecek her saat bilgisi için form dizileri oluşturmalısın. Örneğin SeansModel ve SaatModel diye adları olsun modellerin. Eklenecek her bir saatte ki form elementinin name özelliği SaatModel[0].Baslangic gibi olmalı. Satır ekledikçe bu dizinin değerini artırarak ilerletmen gerekmekte yani ikinci bir saat için SaatModel[1].Baslangic gibi. Bu şekilde yaparsan model list olarak alt bilgiyi de alır. Controller tarafında önce seansı kaydedip id sini aldıktan sonra saat modelindeki her bir satır için malesef elle belirtmen gerekmekte. Onları da saat olarak db ye kaydedersin. Alternatif yöntemlerde mevcut, ancak bu işte yapman gereken can alıcı nokta şu view de ki dizin mantığı. Tavsiyem Knockout.js kullanman çok rahat edersin.

    Fullstack Developer

    12 Ekim 2016 Çarşamba 04:53
  • Aslında birazda yanlışım varmı acaba diyerekten soruyorum.

    eneskarakara[at]gmail[nokta]com

    12 Ekim 2016 Çarşamba 05:57
  • Bana göre yok zaten olayı anlatmışsın :) Yani EF de bildiğim kadarıyla bir alt liste modelinde yaptığın değişiklikleri direk görmüyor diye biliyorum ama bazı kaynaklarda da görmüştüm modelin alt model listelerini de ilişkili olarak id değerlerini alıp kaydettiğini. EF yapılandırması sanırım farklı çünkü codefirst i db den ürettiğinde liste objeleri için propertylere baktığımda annotationlarda dikkat edin liste objeleri otomatik güncellenmez diye birşeyler yazıyor. Belki farklı patternlerde vardır ama standartta bu şekilde özellikle uyarı yazısı ekliyor. Bu da şu demek normalde liste leri güncellediğini düşünmeyin. Bunun dışında ne var işte index li view konusu onu da o şekilde yapılması uygun olan yol diye biliyorum okuduğum makalelerin hemen hemen hepsi bu şekilde uygundur diyor.

    Fullstack Developer

    12 Ekim 2016 Çarşamba 06:12
  • Bana göre yok zaten olayı anlatmışsın :) Yani EF de bildiğim kadarıyla bir alt liste modelinde yaptığın değişiklikleri direk görmüyor diye biliyorum ama bazı kaynaklarda da görmüştüm modelin alt model listelerini de ilişkili olarak id değerlerini alıp kaydettiğini. EF yapılandırması sanırım farklı çünkü codefirst i db den ürettiğinde liste objeleri için propertylere baktığımda annotationlarda dikkat edin liste objeleri otomatik güncellenmez diye birşeyler yazıyor. Belki farklı patternlerde vardır ama standartta bu şekilde özellikle uyarı yazısı ekliyor. Bu da şu demek normalde liste leri güncellediğini düşünmeyin. Bunun dışında ne var işte index li view konusu onu da o şekilde yapılması uygun olan yol diye biliyorum okuduğum makalelerin hemen hemen hepsi bu şekilde uygundur diyor.

    Fullstack Developer

    Aslında yanlış biliyorsunuz. EF hem nesnenin kendisini hemde ilişkili olan tekil yada çoğul kayıtların hepsini takip edip değişikliği algılar. Yani;

    var item = dbContext.Invoices.Singe(p=>p.Id == myId);
    item.Date = DateTime.Now;
    item.Customer.Title = "Yeni müşteri ünvanı";
    item.Details[0].ProductId = 15; //fatura kalemlerinden 1. kalem içerisindeki ürünü değiştirdik.
    dbContext.SaveChanges(); 

    Şimdi SaveChanges() dedimizde entity framework 3 adet update sorgusu atar.

    Update 1 - Fatura Tarihini güncellemek için

    Update 2 - Müşterinin ünvanını güncellemek için

    Update 3 - Fatura kalemindeki ürünün idsini değiştirmek için.

    Soruda ise view tarafından bir model içerisinde post işlemini yaptığında, önce gidip seansı sonrada seansın idsini alıp saatleri kaydetme gibi bişey yapmayacaksınız.

    Örnek aşağıda;

    var model = new SeansModel();
    model.FilmId = viewModel.FilmId;
    model.SalonId = viewModel.SalonId;
    model.Seanslar.AddRange(viewModel.Seanslar.Select(s=>new SeansSaatModel{ Baslangic = s.Baslangic, Bitis = s.Bitis}));
    dbContext.Seanslar.Add(model);
    dbContext.SaveChanges();
    Tabi view tarafında direkt data model olan SeansModel nesnesini model olarak kullanmış isen bu tür dönüşüm yapmana da gerek yok. Direkt gelen modeli dbContext.Seanslar.Add(model); diyerek ekleyebilirsinde.


    oguzkurtcuoglu.com



    12 Ekim 2016 Çarşamba 06:25
  • Normalde var olan kayıtlarda düzenleme yapınca kaydettiğini biliyorum ama add ederken id yi eşleştirme konusunu bilmiyorum. Olabilir doğrudur.

    Fullstack Developer

    12 Ekim 2016 Çarşamba 07:12
  • Bu arada hazır siz konuyu biliyorken şunu da sorayım :) Aynı mantıkla edit yaptığımız bir kayıt var yalnız alt kayıtlar şöyle olsa bir kısmı silinse bir kısmı editlense bir kısmıda yeni eklenmiş olsa modeli attach edip savechanges yapınca kaydedermi

    Fullstack Developer

    12 Ekim 2016 Çarşamba 07:31