EF 4.1中的POCO实体和IsLoaded()

时间:2012-06-27 09:44:47

标签: entity-framework-4 poco eager-loading

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

1 个答案:

答案 0 :(得分:2)

关闭延迟加载并检查null是否有效。您当前的解决方案无法使用延迟加载,因为您在运行查询后立即处置上下文:

context.Configuration.LazyLoadingEnabled = false;