1

有人可以在这里帮助我,为什么我会收到异常“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

返回,没有错误发生。

4

1 回答 1

0

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

于 2012-10-24T12:54:22.563 回答