EF4 - 数据未刷新/更新

时间:2011-05-05 21:10:32

标签: entity-framework entity-framework-4

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

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

 var list = Context.Transactions
            .Where(t => t.Locked).ToList() ;

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

当我运行SQL分析器时,我可以看到,对于我的上述代码,数据是从数据库中正确检索的。这个缓存或身份地图问题是我没有正确使用EF。

1 个答案:

答案 0 :(得分:12)

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

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

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

var query = (ObjectQuery)(yourLinqQuery);
query.MergeOption = MergeOption.OverwriteChanges;
// Now iterate / execute query