我们有一个很长的实体框架上下文运行(不要问为什么......),一个查询检索用户实体及其关联:
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;
任何人都可以帮忙解决这个问题吗?
答案 0 :(得分:2)
没有选项会自动删除内存中不在磁盘上的项目。
http://blog.dynatrace.com/2009/03/11/adonet-entity-framework-unexpected-behaviour-with-mergeoptions/
您可以清除整个上下文,但这可能会导致其他问题。
基本上EF对长时间运行的上下文不起作用,通过删除长时间运行的上下文来解决问题并获得更稳定的系统可能会更快。
答案 1 :(得分:0)
在删除后选择之前,你需要.SaveChanges()。 别无他法。