【发布时间】:2018-09-30 23:09:02
【问题描述】:
我目前正在使用链接到 SQL Server 数据库的 EF 6.1.3 构建 ASP.NET MVC 5 应用程序。
我的问题:当我尝试保存 2 个或更多“PurchaseInvoiceSplitsViewModel”实例时收到以下错误,仅保存 1 个时没有问题。
无法确定“WebAS.Models.PurchaseInvoiceSplits_VehicleStock”关系的主体端。 多个添加的实体可能具有相同的主键。
问题出现在_context.SaveChanges(); 行
我的视图模型:
public class PurchaseInvoiceHeaderFormViewModel
{
public PurchaseInvoiceHeaderFormViewModel()
{
Splits = new List<PurchaseInvoiceSplitsViewModel>();
}
public List<PurchaseInvoiceSplitsViewModel> Splits { get; set; }
}
public class PurchaseInvoiceSplitsViewModel
{
public PurchaseInvoiceSplits PurchaseInvoiceSplits { get; set; }
public VehicleInformation VehicleInformation { get; set; }
public VehicleStock VehicleStock { get; set; }
}
我的模特:
public class VehicleStock
{
[Key]
public int VehicleStockId { get; set; }
public int VehicleInformationId { get; set; }
public VehicleInformation VehicleInformation { get; set; }
}
public class PurchaseInvoiceSplits
{
[Key]
public int PurchaseInvoiceSplitsId { get; set; }
public int? VehicleStockId { get; set; }
public VehicleStock VehicleStock { get; set; }
}
public class VehicleInformation
{
[Key]
public int VehicleInformationId { get; set; }
}
控制器:
[HttpPost]
public ActionResult Save(PurchaseInvoiceHeaderFormViewModel viewModel)
{
_context.PurchaseInvoiceHeader.Add(viewModel.PurchaseInvoiceHeader);
foreach (var Split in viewModel.Splits)
{
Split.PurchaseInvoiceSplits.VehicleStockId =
Split.VehicleStock.Id;
Split.VehicleStock.VehicleInformationId =
Split.VehicleInformation.Id;
_context.VehicleInformation.Add(Split.VehicleInformation);
_context.VehicleStock.Add(Split.VehicleStock);
_context.PurchaseInvoiceSplits.Add(Split.PurchaseInvoiceSplits);
}
_context.SaveChanges();
return RedirectToAction("xxx", "xxx");
}
我花了很长时间研究这个问题,我相信这与 EF 为模型分配临时 ID 为 0 有关。当有一个模型但似乎会导致多个模型实例化的导航/参考问题时,这很好。对其他论坛帖子的回答建议使用我尝试过但未能开始工作的临时 ID。任何帮助将不胜感激。请随时要求进一步澄清/代码 sn-ps。
【问题讨论】:
标签: c# sql-server asp.net-mvc-5 entity-framework-6