基本上我有一个存储库来控制对我的 EF 模型的访问。它创建引用,然后根据正在访问的存储库,返回被请求的实体。现在我正在公开一个 IQueryable Get 方法,它将直接从活动的 ObjectContext 返回实体。好的做法告诉我,我应该将任何 ObjectContext 使用包装在 using 语句中,以确保它被正确处理,但是当我从存储库执行此操作时,我收到一个错误,即在控制器加载它时 ObjectContext 已经被处理。我已经删除了使用,然后它工作得很好,但我想知道通常应该如何处理这个问题。我想维护一个 IQueryable 返回,因为我可能需要对其执行各种命令。有什么建议么?如果多个 HTTP 请求开始进入,EF 是否有助于保护我免于打开连接?
错误输出:
public IQueryable<IUser> Get
{
get
{
using (var context = new DrinkersPassportEntities(_connString))
{
return context.Users.AsQueryable();
}
}
}
有效但不能帮助我晚上入睡:
public IQueryable<IUser> Get
{
get
{
var context = new DrinkersPassportEntities(_connString);
return context.Users.AsQueryable();
}
}
我的控制器目前正在做的就是:
public ViewResult Index( )
{
return View(userRepo.Get);
}