有人可以帮助我,为什么我得到异常“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
返回,不会发生错误。
答案 0 :(得分:0)
在代码中的某处,您在枚举查询结果之前处理DbContext。是不在您提供的代码中,但这是唯一的解释。