Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 已尝试附加或添加不是新的Linq to Sql错误的实体_C#_Asp.net Mvc_Linq To Sql - Fatal编程技术网

C# 已尝试附加或添加不是新的Linq to Sql错误的实体

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);

我的订单实体有一个保存函数,如下所示,它在sumbmitChanges行中断:

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。我的问题确实是由将现有实体附加到新实体而引起的;在担心关联之前插入新实体解决了错误。