2

我们有一个很长的实体框架上下文正在运行(不要问为什么......),它有一个查询来检索用户实体及其关联:

var user = entities.UserSet.Include("UserAddresses")
                   .Where(u => u.Id == 1).FirstOrDefault();

如果从数据库中删除了一行用户地址(由另一个进程),并且我们再次运行此查询,我们仍然会得到删除的行,即使我们在调用之前设置 MergeOption(为了进入数据库在任何情况下都不要使用缓存):

(尝试了我在查询中的任何集合,但没有成功)

entities.UserSet.MergeOption = System.Data.Objects.MergeOption.OverwriteChanges;
entities.UserAddress.MergeOption = System.Data.Objects.MergeOption.OverwriteChanges;
entities.UserSet.Include("UserAddresses").MergeOption = System.Data.Objects.MergeOption.OverwriteChanges;

任何人都可以帮助解决这个问题吗?

4

2 回答 2

2

没有选项可以自动删除内存中不在磁盘上的项目。

http://blog.dynatrace.com/2009/03/11/adonet-entity-framework-unexpected-behaviour-with-mergeoptions/

您可以清除整个上下文,但这可能会给您带来其他问题。

基本上 EF 不适用于长时间运行的上下文,通过删除长时间运行的上下文,您可以更快地解决问题并获得更稳定的系统。

于 2009-12-22T10:31:18.960 回答
0

在删除后选择之前,您必须使用 .SaveChanges()。没有其他办法解决这个问题。

于 2009-12-25T11:57:18.310 回答