问题描述
这是一种称为乐观并发的特性的副作用。
不是 100% 确定如何在 Entity Framework
中打开/关闭它,但基本上它告诉你的是,在你从数据库中抓取数据到你保存更改之间,其他人已经更改了数据(这意味着你去的时候保存它 0 行实际上已更新)。在
sql 术语中,他们的update
查询where
子句包含行中每个字段的原始值,如果有 0 行受到影响,它就知道出了问题。
它背后的想法是您最终不会覆盖您的应用程序不知道已经发生的更改 - 它基本上是 .NET 在您的所有更新中引入的一个小安全措施。
如果它是一致的,那么它很可能发生在您自己的逻辑中(例如:您实际上是在选择和更新之间的另一种方法中自己更新数据),但这可能只是两个应用程序之间的竞争条件。
解决方法
我正在使用实体框架来填充网格控件。有时,当我进行更新时,我会收到以下错误:
存储更新、插入或删除语句影响了意外数量的行 (0)。自加载实体后,实体可能已被修改或删除。刷新 ObjectStateManager 条目。
我不知道如何重现这个。但这可能与我进行更新的紧密程度有关。有没有人看到这个或者有没有人知道错误信息是指什么?
编辑:不幸的是,我不再自由地重现我在这里遇到的问题,因为我离开了这个项目,不记得我是否最终找到了解决方案,是否有其他开发人员修复了它,或者我是否解决了它。因此我不能接受任何答案。