C# 已尝试附加或添加不是新的Linq to Sql错误的实体
我的订单实体有一个保存函数,如下所示,它在sumbmitChanges行中断:C# 已尝试附加或添加不是新的Linq to Sql错误的实体,c#,asp.net-mvc,linq-to-sql,C#,Asp.net Mvc,Linq To Sql,我的订单实体有一个保存函数,如下所示,它在sumbmitChanges行中断: public void SaveOrder ( Order order ) { if (order.OrderId == 0) orderTable.InsertOnSubmit(order); else if (orderTable.GetOriginalEntityState(order) == null) { orderTable.Attach(order);
public void SaveOrder ( Order order ) {
if (order.OrderId == 0)
orderTable.InsertOnSubmit(order);
else if (orderTable.GetOriginalEntityState(order) == null) {
orderTable.Attach(order);
orderTable.Context.Refresh(RefreshMode.KeepCurrentValues , order);
}
orderTable.Context.SubmitChanges();
}
订单实体包含两个其他实体;地址实体和信用卡实体。现在我希望这两个实体有时为null
现在我猜测这为什么会抛出一个错误,是因为这两个在顺序中的实体都是空的。如果是这种情况,我如何在两个实体(地址和信用卡)都为空的情况下将新订单插入数据库
编辑:
所以我现在删除了信用卡实体和地址实体,但我意识到是什么导致了问题。订单有一组图像(一个图像是一个实体),它会抛出错误,因为(我假设)我无法插入一个新订单,因为订单中已经存在一堆图像。所以我知道问题是什么,但我不知道如何解决它。任何帮助都将不胜感激。感谢问题是Linq to SQL已经知道地址和信用卡,但是当您告诉它插入订单(包含地址和信用卡)时,Linq to SQL也会尝试插入这两个实体(它对整个图形都是这样做的)
我的猜测是,您需要a)确保没有将现有实体附加到新实体,或者b)首先插入新实体,然后连接您的关联。您的图像实体是否来自不同的数据上下文?只要它们来自您用来保存订单的同一数据上下文,就不应再次尝试添加它们。是的。我现在正试图弄清楚如何让它工作。我在考虑制作一个所有存储库都将使用的datacontext。但我不确定如何实现这一点,只需通过构造函数将datacontext传递到存储库即可。为简单起见,+1。我的问题确实是由将现有实体附加到新实体而引起的;在担心关联之前插入新实体解决了错误。