我试图通过改变两个不同浏览器中的记录来强制ChangeConflictException。这在过去对我有用。但现在它不会抛出异常。
最后一个赢了。
我已检查了我正在更新的实体的列属性,并且每列都设置为始终检查。
我能找到什么吗?
我没有扩展此数据上下文或对任何属性进行任何修改。
感谢。
答案 0 :(得分:2)
你确定这不是发生的事情:
这里的关键点是实体在回发时重新加载(HTTP =无状态),并且在6)你实际上正在加载4)所做的更改并覆盖它们。 Linq2Sql不会“盖章”您需要手动执行此操作的表单。
您在评论中写道,您有另一个有用的应用程序。如果这是一个Windows应用程序,那么情况就完全不同了,因为实体很可能不会再次重新加载。
答案 1 :(得分:0)
那是一场竞争条件。考虑您可能正在检索信息,更新并发送到数据库。如果第一个提交对db的更改,则在第二个检索信息之前,您不会发生冲突。
更新:关于无法执行此操作的评论。你可以这样做,你使用Attach方法,但你需要保留你想要它检查并发性的任何原始值。检查这些:
linq2sql-update-object-not-created-in-datacontext
how-to-update-a-single-column-in-linq-without-loading-the-entire-row
这肯定是linq数据源下发生的事情。