System.Data.Linq.ChangeConflictException:未找到或更改行

时间:2010-02-02 01:38:57

标签: c# asp.net linq-to-sql

我浪费了这一天的大部分时间,而且与今天早上的情况相比,我没有更接近理解这个问题。

我循环遍历一组对象并将其标记为删除。第二个总是导致上述异常。 tb_invoice有一个FK到tb_shipment。

与往常一样,我可能遗漏了一些非常明显的东西,但是我已经从这段代码中删除了很多,以至于没有任何东西,我仍然得到这个例外。这是一个本地SQL 2008实例,当然没有任何内容,也没有人在读取它们和调用SubmitChanges()之间更改发票。救命啊!

myDataContext db = new myDataContext(); 

IQueryable<invoiceDetail> pendingInvoices  
   = db.GetInvoiceDetailPending(); 

foreach (invoiceDetail id in pendingInvoices) { 
    tb_shipment s = db.GetShipmentById((Guid)id.shipment_id); 

    db.tb_invoices.DeleteOnSubmit(
          db.GetInvoiceById(s.tb_invoices.FirstOrDefault().id));        } 

    SubmitChanges();    // fails for the 2nd invoice 
} 

1 个答案:

答案 0 :(得分:0)

System.Data.Linq.ChangeConflictException: Row not found or changed

将SQL Server中的外键的Delete操作设置为“Cascade”也是如此。我希望我早些时候记得曾经遇到过这个问题。