将数据插入多个表MVC ASP的最佳方法

时间:2014-05-02 13:54:02

标签: asp.net asp.net-mvc asp.net-mvc-4 entity-framework-5

我有4张桌子。 OperationTable,ClientTable,ClientDetails,OperationRes

ClientTable

  • 客户端ID
  • 名称
  • 生日
  • VerNumber

ClientDetails

  • 客户端ID
  • 电子邮件
  • ADRESS
  • 电话

OperationTable

  • OperationID
  • 日期
  • 时间
  • 客户端ID

OperationRes

  • 渣油
  • OperationID
  • 名称
  • 类型
  • 没有

我有页面要求客户填写表格以注册smth。一切都必须在一个页面中,在客户提交表单后,我们必须将所有数据插入到表中。 OperationTable的日期和时间,ClientTable的名称和姓氏等。 我是ASP.NET MVC的新手。我曾尝试使用“Code Fisrt”。我创建了Model并且只是用它来自动生成View和Controller。但这不是我想要的。我发现了这个Tutorial。有用!但我有超过4个表,比上面写的更多行。什么是最好的解决方案?

2 个答案:

答案 0 :(得分:17)

您需要一个包含要插入的所有数据的视图模型,然后在控制器中根据该视图模型创建对象并使用EF插入。类似的东西:

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
}

然后在您的控制器中,使用ViewModel填充您的实体,然后使用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();

}

您可能希望查看使用Repository Pattern整理实体框架代码,还可以查看automapper来映射您的viewmodel中的实体,以便手动保存。

答案 1 :(得分:3)

逻辑上,您的操作将与教程显示完全相同。只有你必须创建包含所有4个表字段的ViewModel。

然后当表单发回时,你的逻辑决定ViewModel中的哪个字段转到哪个表'模型。然后保存该表模型。

在教程中,它使用一个ViewModel(LoginViewModel)并保存到两个表(Login,User)。在你的情况下,只保存到4(OperationTable,ClientTable,ClientDetails,OperationRes)。