首页 文章

为什么要放置ObjectContext实例?

提问于
浏览
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);
                }

为什么不再?

- EDIT -

更多信息:

这里的类使用发生问题的函数: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;
        }
    }

- EDIT -

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

x => x.InstallationId == InstallationRepository.CurrentInstallationId

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

x => x.InstallationId == 1

返回,没有错误发生 .

1 回答

  • 0

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

相关问题