为什么我的LINQ to SQL查询第一次失败(“未找到或未更改行”)并第二次成功?

时间:2009-12-09 22:39:43

标签: asp.net-mvc linq linq-to-sql

我在ASP.NET MVC中使用LINQ to SQL。我写了一些新的代码来更新我们系统中的Orders,据我所知,它与我编写的其他几百个类似的代码完全相同(抓住对象,更新一些字段,提交更改)。

这一次,当我尝试运行更新时,我在此调用堆栈上得到“未找到或未更改行”LINQ异常:

System.Data.Linq.dll!System.Data.Linq.DataContext.SubmitChanges(System.Data.Linq.ConflictMode failureMode) + 0x14c bytes    
System.Data.Linq.dll!System.Data.Linq.DataContext.SubmitChanges() + 0x14 bytes  

如果我只是在异常后刷新页面,它就没有问题。

我怎样才能让它第一次正常工作?

我在网上看到了与DateTime精度和更新检查有关的答案,但没有关于提交只是第二次工作,而不是第一次。

我的代码基本上是这样的:

Order order = myDataContext.Orders.SingleOrDefault(order.OrderID == orderID);
order.Field1 = true;
order.Boolean2 = true;
order.Double1 = 300.0;
myDataContext.SubmitChanges();

3 个答案:

答案 0 :(得分:1)

问题是我在获取订单,编辑和保存订单之间更改了相关表格。

更改相关表后,由于父子关系,Order表被间接更改。这导致更改检查验证失败。

我需要做的就是将所有相关代码(获取,更改,保存)拉到一个紧密的块中,中间没有其他代码。我现在没有任何问题。

答案 1 :(得分:0)

您的代码看起来很好。

myDataContext中必定存在导致问题的其他内容。

myDataContext定义在哪里?我猜测if中有一些代码是postback块,或类似的东西,导致运行的代码采用不同的路径。

答案 2 :(得分:0)

重新绑定时是否正在创建新的datacontext(在调用SubmitChanges之后)?

在使用datacontext执行插入/更新/删除操作后,不应重复使用datacontext进行选择。