0

我正在开发一个企业应用程序,该应用程序利用 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 块还是有其他选择?

4

1 回答 1

2

关闭延迟加载并检查 null 将起作用。您当前的解决方案不能使用延迟加载,因为您在运行查询后立即处理上下文:

context.Configuration.LazyLoadingEnabled = false;
于 2012-06-27T10:59:30.907 回答