我正在开发一个企业应用程序,该应用程序利用EF 4.1上的存储库模式,并急切加载到POCO实体。通常,呼叫将如下所示:
public IEnumerable<SomeEntity> List(DateTime date)
{
using (var context = ContextFactory.CreateContext()) // Returns a DbContext
{
return CreateQuery<SomeEntity>(context)
.Include("PATH1")
.Include("PATH2")
.Where(...)
.AsNoTracking()
.ToList();
}
}
在某些时候,业务层将这些实体转换为DTO,然后通过WCF传输到Web应用程序。
由于急切的加载相当昂贵,我试图保持.Include是最小的,所以有时相关的属性(急切地)加载,有时它们不是。但是,业务层不知道实体中何时存在相关属性,因此我得到一个ObjectContextDisposedException,其原因对我来说非常清楚,我不打算改变基本策略(即在之后配置上下文)渴望加载实体)。
但是,我需要检查是否加载了特定的相关属性,检查相关对象是否为空(ObjectContextDisposedException),也没有任何类型的IsLoaded()方法可以使用。
我在这里遇到了try / catch块还是有其他选择?
答案 0 :(得分:2)
关闭延迟加载并检查null是否有效。您当前的解决方案无法使用延迟加载,因为您在运行查询后立即处置上下文:
context.Configuration.LazyLoadingEnabled = false;