Entity framework 4 EF 4.1中的POCO实体和IsLoaded()

Entity framework 4 EF 4.1中的POCO实体和IsLoaded(),entity-framework-4,poco,eager-loading,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>(c

我正在开发一个企业应用程序,它利用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();
   }
}
公共IEnumerable列表(日期时间日期)
{
使用(var context=ContextFactory.CreateContext())//返回DbContext
{
返回CreateQuery(上下文)
.包括(“路径1”)
.包括(“路径2”)
.其中(…)
.AsNoTracking()
.ToList();
}
}
在某个时刻,业务层将这些实体转换为DTO,然后通过WCF传输到web应用程序

由于即时加载的成本相当高,我正试图将.Include的成本降到最低,因此有时相关属性会(急切地)加载,有时则不会。但是,业务层不知道实体中何时存在相关属性,因此我得到一个ObjectContextDisposedException,其原因对我来说非常清楚,我不打算更改基本策略(即在加载实体后立即处理上下文)

但是,我需要检查是否加载了特定的相关属性,检查相关对象是否为null不起作用(ObjectContextDisposedException),也不存在任何可以使用的IsLoaded()方法


我是否被这里的try/catch块卡住了,或者还有其他选项吗?

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

context.Configuration.LazyLoadingEnabled = false;