ASP MVC 5 EF 6 - 插入多个表

时间:2014-02-19 00:07:43

标签: sql-server asp.net-mvc entity-framework relational-database

我有一个现有的数据库,我使用VS2013和EF6构建了一个shell Web应用程序,但是我遇到了一些问题。

我的数据库有以下表格,例如:

Table: Customer (Id, First, Last, Date)
Table: Assets (Id, CustID)
Table: Orders (Id, AssetId, CustID)

当EF为我创建shell webapp(它很棒)时,它给了我以下方法,例如,创建一个新的Customer:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include="Id, First, Last, Date")] Customer customer)
....
return View(customer)

在我的数据库中,我有一个客户许多订单和资产,但我不明白如何在创建操作或其他任何操作期​​间使用此关系

我的问题 - 当此操作需要跨多个表时,如何“创建”新的客户?例如,当填写“创建客户”表单时,您将添加一个或多个资产和/或订单

我应该使用存储过程跨三个不同的表执行多次插入吗?或者我可以对数据库进行更改,让我使用所有EF魔法吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

您可以使用包含所有三个类的视图模型。

public class CreateCustomerViewModel
{
    public Customer Customer { get; set; }
    public ICollection<Asset> Assets { get; set; }
    public ICollection<Order> Orders { get; set; }
}

您的[HttpGet]操作方法会将此视图模型作为模型而不是Customer传递。

[HttpGet]
public ActionResult Create()
{
    CreateCustomerViewModel model = new CreateCustomerViewModel();
    return View(model);
}

您的[HttpPost]操作方法会将CreateCustomerViewModel作为参数:

[HttpPost]
public ActionResult Create(CreateCustomerViewModel model)
{
    // Create the Customer with the necessary Assets and Orders and save
}

如果正确配置了类和关系,则在Customer实体的导航属性中添加相应的资产和订单应触发EF在插入时自动将资产和订单插入相应的表中Customer