【问题标题】:POCO entities and IsLoaded() in EF 4.1EF 4.1 中的 POCO 实体和 IsLoaded()
【发布时间】:2012-06-27 09:44:46
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    context.Configuration.LazyLoadingEnabled = false;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-12
      • 2012-07-05
      • 1970-01-01
      • 1970-01-01
      • 2011-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多