Entity framework 为什么处置ObjectContext实例?

Entity framework 为什么处置ObjectContext实例?,entity-framework,entity-framework-5,Entity Framework,Entity Framework 5,有人能在这里帮助我吗?为什么我会在下一节中遇到异常“ObjectContext实例已被释放,不能再用于需要连接的操作” public virtual IEnumerable<TEntity> Get(Expression<Func<TEntity, bool>> filter, Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy) {

有人能在这里帮助我吗?为什么我会在下一节中遇到异常“ObjectContext实例已被释放,不能再用于需要连接的操作”

    public virtual IEnumerable<TEntity> Get(Expression<Func<TEntity, bool>> filter, Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy)
    {
        if (this.CheckAccess(this.OnCanRead))
        {
            try
            {
                Expression<Func<TEntity, bool>> baseFilter = this.GetFilter(this.OnFilter);

                IQueryable<TEntity> result = this.Set.AsQueryable();

                if (baseFilter != null)
                {
                    result = result.Where(baseFilter);
                }

                if (filter != null)
                {
                    result = result.Where(filter);
                }

                if (orderBy == null)
                {
                    return result.ToList();
                }
                else
                {
                    return orderBy(result).ToList();
                }
            }
            catch (Exception)
            {
                throw;
            }
        }
        else
        {
            throw new AccessException("CanRead");
        }
    }
为什么不再

-编辑-

更多信息:

下面是使用出现问题的函数的类:

在我的程序中,有一个名为ShopRepository的类,它派生自:

public class ShopRepository : DbContextRepository<Shop>
如果有一个固定值,例如

x => x.InstallationId == 1

如果返回,则不会发生错误

在枚举查询结果之前,可以在代码中的某个地方处理DbContext。您提供的代码中没有,但这是唯一的解释。

为什么要进行这些
try catch
模糊处理?使您的代码难以阅读。上下文是什么?例如,您在哪里实例化ObjectContext?因此,try-catch块出现,只有在必要时才应使用它,这是出于速度原因。集合是DbSet对象,包含的上下文是DbContext对象。这没有意义。你应该把试抓器移到任何地方。另外,显示调用此函数的代码,这就是我所说的提供更多上下文的意思。如果您发现自己正在编写
catch(Exception)
catch(Exception ex)
,那么您做错了什么。这也是我首先考虑的问题,这就是为什么我要调用所有dispose。此外,仅用于变量“result”的ObjectContext不会用于“this.Set”。这只发生在where函数的代码中,orderBy块中没有问题。因此,在调用where之前,上下文在调用后仍然没有“释放”,他是“释放”的,在这两者之间,不会发生任何其他情况。where、orderBy等Linq方法决不会导致此异常。在您的例子中,只有枚举结果才能调用ToList()(它也可能是ToArray()或任何迭代此查询结果的foreach循环)。请看这里:当您不传入“where”筛选器时,它是否有效?如果是这样,“where”过滤器看起来像什么?
public static class DataManager
{
    public static void Initialize()
    {
        Initializer.Initializer.SetInitializer();

        ObjectFactory.Configure(
           x =>
           {
               x.For<DbContext>().Use<DataContext>();
               x.For<IUnitOfWorkFactory>().Use<DbContextUnitOfWorkFactory>();
           }
        );

        DbContextUnitOfWorkFactory.SetDbContext(CreateContext);
    }

    private static DbContext CreateContext()
    {
        return new DataContext();
    }

    private static ShopRepository _shops;

    public static ShopRepository Shops
    {
        get
        {
            if (DataManager._shops == null)
            {
                DataManager._shops = ObjectFactory.GetInstance<ShopRepository>();
            }

            return DataManager._shops;
        }
    }
x => x.InstallationId == InstallationRepository.CurrentInstallationId
x => x.InstallationId == 1