我有一个现有的数据库,我使用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魔法吗?
感谢您的帮助!
答案 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
。