【问题标题】:Best way to insert data to multiple table MVC ASP将数据插入多个表 MVC ASP 的最佳方法
【发布时间】:2014-05-02 13:54:02
【问题描述】:

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

客户表

  • 客户 ID
  • 姓名
  • 姓氏
  • 生日
  • 版本号

客户详情

  • 客户 ID
  • 电子邮件
  • 地址
  • 电话

操作表

  • 操作ID
  • 日期
  • 时间
  • 客户 ID

操作解析

  • ResID
  • 操作 ID
  • 姓名
  • 类型
  • 没有

我有一个页面,我们要求客户填写表格以进行注册。一切都必须在一页中,并且在客户提交表单后,我们必须将所有数据插入到它的表中。日期和时间到 OperationTable,姓名和姓氏到 ClientTable 等等。 我是 ASP.NET MVC 的新手。我曾尝试使用“代码优先”。我已经创建了模型,只是用它来自动生成视图和控制器。但这不是我想要的。我找到了这个Tutorial。有用!但是我有超过 4 个表格,其中的行数比我上面写的要多。什么是最好的解决方案?

【问题讨论】:

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


    【解决方案1】:

    您需要一个视图模型来保存您要插入的所有数据,然后在您的控制器中创建基于该视图模型的对象并使用 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 以从您的视图模型映射实体,以节省手动操作。

    【讨论】:

    • 非常感谢您的详细回答。 MyViewModel 增长是否正常。 1) 姓名 2) 姓 3) 生日 ... 50) 某事。?或者除了创建视图模型还有其他解决方案。提前致谢
    • 如果您希望用户输入/编辑来自不同表的数据,那么是的,您肯定需要一个视图模型,由于过度定位攻击,使用视图模型而不是实体也有安全优势。
    • 只是反过来做同样的事情,从数据库中加载你的实体,然后有一个视图模型来显示组合数据,将值分配给视图模型并从你的控制器返回它
    • 你能给一个示例链接吗?我用谷歌搜索,没有什么对我有用。提前致谢
    • 那不行...我不能在cmets中发布详细信息,但是asp.net上有很多教程和文章asp.net/mvc您也可以尝试:codeproject.com/Articles/687061/…采取看看页面底部,它提到了视图模型。
    【解决方案2】:

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

    然后,当表单回传时,执行您的逻辑来决定 ViewModel 中的哪个字段进入哪个表的模型。然后保存该表模型。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-22
      • 1970-01-01
      • 2021-05-19
      • 1970-01-01
      相关资源
      最近更新 更多