2014-05-02 31 views
10

Mam 4 tabele. OperationTable, ClientTable, ClientDetails, OperationResNajlepszy sposób wstawiania danych do wielu tabel MVC ASP

ClientTable

  • ClientID
  • Nazwa
  • Nazwisko
  • urodzin
  • VerNumber

ClientDetails

  • ClientID
  • email
  • Property
  • Telefon

OperationTable

  • OperationID
  • Data
  • Czas
  • ClientID

OperationRes

  • pozost
  • OperationID
  • Nazwa
  • Rodzaj
  • Nie

mam stronę gdzie prosimy klienta o wypełnienie formularza, aby się zarejestrować. Wszystko musi znajdować się na jednej stronie, a po przesłaniu formularza przez Klienta musimy wstawić wszystkie dane do jego tabeli. Data i godzina do OperationTable, Name i nazwisko do ClientTable i tak dalej. Jestem nowy w ASP.NET MVC. próbowałem użyć "Code Fisrt". Stworzyłem Model i właśnie wykorzystałem go do automatycznego generowania widoku i kontrolera. ale nie tego chcę. Znalazłem to Tutorial. to działa! Ale mam więcej niż 4 tabele, które i więcej wierszy niż piszę powyżej. jakie jest najlepsze rozwiązanie?

Odpowiedz

16

Potrzebujesz modelu widoku zawierającego wszystkie dane, które chcesz wstawić, a następnie w kontrolerze stwórz obiekty oparte na tym modelu widoku i wstaw przy użyciu EF.Coś jak:

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 
} 

wówczas w kontrolerze, używać ViewModel do wypełnienia swoich jednostek, a następnie włóż użyciu EF

[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(); 

} 

Możesz zajrzeć do sprzątania kodu Entity Framework przy użyciu Repository Pattern możesz także spojrzeć na automapper, aby odwzorować obiekty z twojego viewmodelu, aby zapisać to ręcznie.

+0

dziękuję bardzo za szczegółową odpowiedź. jest to normalne, jeśli MyViewModel rośnie. 1) Imię 2) Nazwisko 3) Urodziny ... 50) coś.? lub czy istnieje inne rozwiązanie, z wyjątkiem tworzenia modelu widoku. z góry dzięki – DSI

+1

Jeśli chcesz, aby użytkownik wprowadzał/edytował dane z różnych tabel, to tak, zdecydowanie będziesz potrzebował viewmodel, istnieją również zalety związane z bezpieczeństwem korzystania z viewmodels zamiast encji, z powodu nadmiernych ataków. – LightningShield

+0

Witam, a co z wyświetlaniem danych z wielu tabel? – DSI

3

Logicznie, twoja operacja będzie dokładnie taka sama jak pokaz samouczka. tylko musisz utworzyć ViewModel, który zawiera wszystkie 4 pola tabeli.

Następnie, gdy formularz zostanie przesłany z powrotem, wykonaj swoją logikę, decydując, które pole w ViewModel idzie do którego modelu tabel. Następnie zapisz ten model tabeli.

W samouczku używa się jednego ViewModel (LoginViewModel) i zapisuje do dwóch tabel (Login, Użytkownik). W twoim przypadku wystarczy zapisać do 4 (OperationTable, ClientTable, ClientDetails, OperationRes).