EF4 - 数据未刷新/更新

kol*_*uri 7 entity-framework entity-framework-4

我有一个使用EF4 POCO /存储库的MVC3应用程序.每当用户在网站上打开某个项目时,它就会在数据库中标记.有一个后端服务,一直检查是否有任何项目被标记为'x'秒,并取消标记.我遇到的问题是在我的后端服务中,我运行的查询似乎找到了标记的项目,但是当我检查单个项目被标记时,实体没有刷新.

这是我的代码,用于查找已标记的项目

 var list = Context.Transactions
            .Where(t => t.Locked).ToList() ;
Run Code Online (Sandbox Code Playgroud)

list.Count()返回正确的数字.但是,当我开始通过'列表迭代时,我发现t.Locked = false

当我运行SQL分析器时,我可以看到,对于我的上述代码,数据正确地从数据库中检索.这是我正在使用EF的缓存还是身份映射问题.

Lad*_*nka 12

仔细阅读这个答案.之后,我建议您重构您的应用程序,以便为每个请求(如果是Web)使用新上下文,并为后端服务中的每个时间事件使用新上下文.

EF使用身份地图模式.一旦实体被上下文加载,默认情况下总是会获得具有相同值的相同实例,尽管从新查询返回数据.有一些方法可以强制EF刷新实体,但它主要用于解决一些并发问题.

如果您仍未被判定更改您的应用程序,请使用此方法强制刷新值:

var query = (ObjectQuery)(yourLinqQuery);
query.MergeOption = MergeOption.OverwriteChanges;
// Now iterate / execute query
Run Code Online (Sandbox Code Playgroud)