有没有什么办法让这个实体从的DbContext查询返回返回null(或其他一些特定的值),当您尝试访问导航属性,你没有具体.Include()?例如:
var parents = dbContext.People.Where(p => p.Children.Any()).Include("Children").ToList();
//Assert all parents have children...
Assert.IsTrue(parents[0].Children.Any());
而且......
var parents = dbContext.People.Where(p => p.Children.Any()).ToList();
//Assert all children collections are null... NOT LAZY LOADED
Assert.IsTrue(parents[0].Children == null);
要清楚,我不希望属性急于装入。我不希望它被加载。我试过从上下文中分离实体,但这没有帮助。
背景
我想这样做的原因是因为我需要访问一个不同势线程比的DbContext创建对一个实体对象。正因为如此,我不希望将导航属性设置为一些有针对性的excution linq语句。问题是,因为我无法访问DbContext来检查导航属性是否加载(由于它不是线程安全的),我无法知道是否需要在当前线程上创建新的DbContext来检索丢失数据。这是我试图用How to tell if a Navigation Property is loaded without DbContext
更新
中的DbContext的Configuration.LazyLoadingEnabled属性设置为false,以解决同样的问题阻止了LINQ从得到自动有线了,但导航性能是集合这会导致一个空集合而不是null。
为了解决基于集合的问题,我修改了我的T4模板来生成一个空的默认构造函数,而不是将每个ICollection设置为一个空的HashSet。
尝试.AsNoTracking的
Configuration.LazyLoadingEnabled
属性禁用延迟加载()。 – DevilSuichiroAsNoTracking()阻止上下文缓存实体,但访问导航属性仍会导致尝试查询其创建的上下文。 – NuclearProgrammer