Best way to insert data to multiple table MVC ASP

2019-02-02 18:27发布

I have 4 tables. OperationTable, ClientTable, ClientDetails, OperationRes

ClientTable

  • ClientID
  • Name
  • Surname
  • Birthday
  • VerNumber

ClientDetails

  • ClientID
  • Email
  • Adress
  • Telephone

OperationTable

  • OperationID
  • Date
  • Time
  • ClientID

OperationRes

  • ResID
  • OperationID
  • Name
  • Type
  • No

i have page where we ask Client to fill a form to register for smth. Everything must be in one page and after Client submit the form, we must insert all data to it's table. Date and Time to OperationTable, Name and Surname to ClientTable and so on. I'm new in ASP.NET MVC. i have tried to use "Code Fisrt". I have created Model and just used it to autogenerate View and Controller. but it's not what i want. i've found this Tutorial. it works! But i have more than 4 tables which and more rows than i write above. what is the best solution?

2条回答
SAY GOODBYE
2楼-- · 2019-02-02 19:10

Logically, your operation will be exactly same as the tutorial show. only you have to create ViewModel which contains all the 4 table fields.

Then when the form post back, do your logic of deciding which field in ViewModel goes to which tables' model. Then save that table model.

In the tutorial it use one ViewModel (LoginViewModel) and save to two table (Login, User). In you case just save to 4 (OperationTable, ClientTable, ClientDetails, OperationRes).

查看更多
冷血范
3楼-- · 2019-02-02 19:14

You want a view model that holds all the data you want to insert, then in your controller create the objects based on that view model and insert using EF. Something like:

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
}

Then in your controller, use your ViewModel to populate your entities, then insert using 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();

}

You may want to look at tidying up the entity framework code using a Repository Pattern and you could also look at automapper to map entities from your viewmodel, to save doing it manually.

查看更多
登录 后发表回答