我正在开发一个企业应用程序,该应用程序利用 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,其原因对我来说非常清楚,我不打算更改基本策略(即在之后立即处理上下文急切加载实体)。
但是,我需要检查是否加载了特定的相关属性,检查相关对象是否为 null 不起作用(ObjectContextDisposedException),也没有任何我可以使用的 IsLoaded() 方法。
我在这里卡住了 try/catch 块还是有其他选择?