有人可以在这里帮助我,为什么我会收到异常“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
返回,没有错误发生。