2014-05-02 30 views
10

4 tablom var. OperationTable,Çoklu tabloya veri eklemenin en iyi yolu MVC ASP

  • ClientTable ClientTable, ClientDetails, OperationRes

  • Adı
  • Soyadı
  • Doğum clientid
  • VerNumber

ClientDetails

  • ClientID
  • Eposta
  • Adres
  • Telefon

OperationTable

  • OperationID
  • tarihi
  • Zaman
  • OperationID
  • Adı
  • Tip
  • No

i sayfasına sahip Reşid

OperationRes

  • clientid Müşteriden, bir formu doldurmak için kayıt olmasını istiyoruz. Her şey bir sayfada olmalı ve Müşteri formu gönderdikten sonra, tüm verileri tabloya eklemeliyiz. OperationTable, Name ve Soyadı ve ClientTable için tarih ve saat. ASP.NET MVC'de yeniyim. "Kod Fistosu" kullanmaya çalıştım. Model oluşturdum ve sadece View ve Controller'ı otomatikleştirmek için kullandım. ama istediğim şey değil. Bu Tutorial'u buldum. işe yarıyor! Ama yukarıda yazdığımdan daha fazla satır olan 4'ten fazla tablo var. En iyi çözüm nedir?

cevap

16

Sen Eklemek istediğiniz tüm verileri, ardından denetleyicisi bu görünüm modeline dayalı nesneleri oluşturmak ve EF kullanarak eklemek tutan bir görünüm modeli istiyorum.Bir şey gibi:

[HttpPost] 
public ActionResult Add(MyViewModel model) 
{ 
    var client = new Client{ 
      Name = model.Name, 
      Birthday = model.Birthday 
    }; 

    var clientDetails = new ClientDetails(); 

    //etc for your other entities 

    using (var context = new MyDbContext) 
    { 
      context.Clients.Add(client); 
      clientDetails.ClientId = client.Id; 
      context.ClientDetails.Add(clientDetails); 
      //etc add your other classes 
      context.SaveChanges(); 

    } 

    //whatever you want to do here for the result, maybe direct to new controller 
    //or return view 
    return View(); 

} 

Bir Repository Pattern kullanarak varlık çerçevesi kodunu toplama bakmak isteyebilirsiniz: Kumandanızda içinde Sonra

public class MyViewModel 
{ 
    public string Name {get; set;} 
    public string Birthday {get; set;} 
    public string VerNumber { get; set;} 
    public string Email {get; set;} 
    public string Address {get; set;} 
    // etc etc for the rest of your data 
} 

, senin varlıkları doldurmak için ViewModel kullanın, ardından EF kullanarak ekleyin Ayrıca, manuel olarak kaydetmek için varlıkları görünüm modunuzdan eşlemek için automapper'a da bakabilirsiniz.

+0

detaylı cevap için çok teşekkürler. MyViewModel büyürse normaldir. 1) İsim 2) Soyadı 3) Doğum günü ... 50) smth. veya görünüm modeli oluşturma dışında başka bir çözüm var. şimdiden teşekkürler – DSI

+1

Kullanıcının farklı tablolardan veri girmesini/düzenlemesini istiyorsanız, evet kesinlikle bir viewmodel'e ihtiyacınız olacaktır, ayrıca pozlama saldırıları nedeniyle, varlıklar yerine viewmodels kullanmanın güvenlik avantajları da vardır. – LightningShield

+0

Merhaba, birden fazla tablodaki gösterim verileri nedir? – DSI

3

Mantıken, sizin operasyon öğretici gösterisi olarak tamamen aynı olacaktır. Sadece tüm 4 tablo alanlarını içeren ViewModel oluşturmalısınız.

Sonra zaman form yazı sırt, hangi tablo modeli gider ViewModel alan karar verme mantık yok. Sonra o tablo modelini kaydedin. o bir ViewModel (LoginViewModel) kullanın ve iki tabloda (Giriş, Kullanıcı) kaydetmek eğitimde

. Sende durum sadece 4 (OperationTable, ClientTable, ClientDetails, OperationRes) kaydedin.

İlgili konular