我有两个Models
,PurchaseOrders
和PurchaseOrderMessages
,如下所示。我正在以这样一种方式实现这一点,即用户在创建采购订单时会输入采购订单详细信息PurchaseOrderName
和PurchaseOrderMessage
。我将PurchaseOrderVM
用于View
。提交详细信息时,请使用POST
方法,如下所示:
_context.Add(purchaseOrdersObj);
_context.Add(purchaseOrdersMessagesObj);
_context.SaveChanges();
我收到以下错误:The INSERT statement conflicted with the FOREIGN KEY constraint
。我了解为什么我会收到该错误。这是因为我的FOREIGN KEY
,PurchaseOrderId
还没有出现在database
中,因为PurchaseOrders
的数据尚未保存。
是否可以在保存Message
的详细信息的同时将PurchaseOrderMessages
保存到PurchaseOrders
?同样,必须以这样的方式完成:一旦创建了PurchaseOrderMessages
,用户将来就应该能够向同一PurchaseOrder
添加更多PurchaseOrder
。并且,应该保存所有PurchaseOrderMessages
,以便可以将它们全部一次又一次地打印在屏幕上。
PurchaseOrders.cs
public class PuchaseOrders
{
[Key]
public int PurchaseOrderId { get; set; }
public string PurchaseOrderName { get; set; }
}
PurchaseOrderMessages.cs
public class PurhcaseOrderMessages
{
[Key]
public int UpdateId { get; set; }
public string Message { get; set; }
[ForeignKey("PurchaseOrder")]
public int PurchaseOrderId { get; set; }
public virtual PurchaseOrder PurchaseOrder { get; set; }
}
PurchaseOrderVM.cs
public class PurchaseOrderVM
{
public int PurchaseOrderId { get; set; }
public string PurchaseOrderName { get; set; }
public string Message { get; set; }
}
答案 0 :(得分:1)
您需要允许EF进行连接,以便它可以按正确的顺序保存对象。不用设置id,而是设置导航属性:
purchaseOrdersMessagesObj.PurchaseOrder = purchaseOrdersObj;
_context.Add(purchaseOrdersMessageObj);
_context.SaveChanges();
答案 1 :(得分:0)
您可以通过两种解决方案来做到这一点:
第一:
public class PuchaseOrders
{
public PuchaseOrders(){
Messages = new List();
}
[Key]
public int PurchaseOrderId { get; set; }
public string PurchaseOrderName { get; set; }
public ICollection<PurhcaseOrderMessages> Messages{ get; set; }
}
PuchaseOrders purchaseOrdersObj= new PuchaseOrders(){ PurchaseOrderName = "Pla Pla"};
purchaseOrdersObj.Messages.Add(new PurhcaseOrderMessages(){Message = "Pla Pla"});
_context.Add(purchaseOrdersObj);
_context.SaveChanges();
第二:如果您在此项目中经常使用SP(存储过程),则可以编写SP来获取两个对象数据并将其插入