实体框架 - 乐观并发问题

时间:2010-05-24 23:25:58

标签: entity-framework concurrency entity

我有一个每10秒运行一次的Windows服务...每次运行时,它会获取一些测试数据,修改它并使用EntityFramework将其持久保存到数据库中。但是,在每次运行时,当我尝试保持更改时,我会得到以下乐观并发异常: -

  

存储更新,插入或删除语句会影响意外的行数(0)。自实体加载后,实体可能已被修改或删除。刷新ObjectStateManager条目

我知道有一个事实是没有其他任何内容写入该数据库但我的服务每10秒更新一次记录。什么可能导致并发异常?

我认为对象图中的某个相关实体在第二次保存操作之前被修改了。 我所做的只是实例化一个新的对象上下文,并在我使用相同的上下文检索的一些记录上调用保存操作。 以下代码有效---

var ctx = new blahEntities();
var profile = ctx.ProfileSet.Where(pr=>pr.FirstName.Contains("a")).FirstOrDefault();
profile.Address = "modified";
ctx.SaveChanges();
ctx.Refresh(RefreshMode.StoreWins,profile);

2 个答案:

答案 0 :(得分:6)

“意外行数(0)”表示您很可能没有在实体模型中正确映射或定义ID字段,或者您正在修改分离的实体并尝试保存它并且它不会没有关键信息。

运行SQL Server探查器或Entity Framework Profiler,看看后台发生了什么。

答案 1 :(得分:2)

一旦遇到同样的问题,花了几个小时跟踪故障更新触发器。如果您正在更新的表上有任何触发器,请确保它们正常工作。我在Oracle环境中工作,fwiw。