为什么要放置ObjectContext实例?

时间:2012-10-24 09:11:47

标签: entity-framework entity-framework-5

有人可以帮助我,为什么我得到异常“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");
        }
    }

在调用之前,仍存在ObjectContext:

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

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

为什么不再?

- 编辑 -

更多信息:

这里的类使用发生问题的函数: DbContextRepository

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

public class ShopRepository : DbContextRepository<Shop>

此外,我的程序中有一个DataManager,它调用了有问题的函数:

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;
        }
    }

- 编辑 -

我发现了问题,但我不知道如何修复它。 如果在ShopRepository中事件OnFilter返回一个动态值,例如

x => x.InstallationId == InstallationRepository.CurrentInstallationId

然后发生错误,如果有固定值,如

x => x.InstallationId == 1
返回

,不会发生错误。

1 个答案:

答案 0 :(得分:0)

在代码中的某处,您在枚举查询结果之前处理DbContext。是不在您提供的代码中,但这是唯一的解释。