我看到操作无法完成,因为已经处理了DbContext。异常消息,即使代码通过返回 List< T> 来使用预先加载。我在 EntityRepository 类中有以下代码:
public List<Entity> GetEntityByProperty(string property)
{
using (AppDbContext appDbContext = GetContext())
{
List<Entity> entities = appDbContext.Entities
.Where(e => e.Property == property)
.ToList();
return entities;
}
}
这又是从Web服务类调用的:
private static EntityRepository EntityRepositoryStatic = new EntityRepository();
[WebMethod]
public List<Entity> GetEntityByProperty(string property)
{
return EntityRepositoryStatic.GetEntityByProperty(property);
}
EntityRepository 继承自存储库基类,该基类实现 IDisposable (用于处置上下文)并使用此代码返回实例背景:
private AppDbContext appDbContext;
public AppDbContext GetContext()
{
if (appDbContext == null)
{
appDbContext = new AppDbContext();
}
return appDbContext;
}
在存储库中调用 appDbContext 的行上抛出异常。我错过了一些明显的东西吗?
这是一个很大的遗留代码库,因此我们只是尝试通过调用存储库类来替换对Web服务中的上下文的内联调用。
答案 0 :(得分:1)
第一次拨打GetContext()
时,您会创建一个新的上下文,然后将其返回,然后使用和处理它。然后,对GetContext()
的下一次调用将返回原始的,已经处置的上下文,并且您会收到错误。如果你想重复使用它,你就不能处理它;如果你想在完成后处理它,你就无法重复使用它。