异常连接';的当前状态在使用实体框架时被破坏
本文关键字:实体 框架 状态 连接 异常 | 更新日期: 2023-09-27 18:21:36
我对EF很陌生。。。目前,我正在用EF在asp.net中开发一个网站,有时我会遇到连接方面的异常。
我读过这篇文章https://github.com/geersch/EntityFrameworkObjectContext根据这个我已经编程:
public static class ObjectContextPerHttpRequest
{
public static tradeEntities Context
{
get
{
string objectContextKey = HttpContext.Current.GetHashCode().ToString("x");
if (!HttpContext.Current.Items.Contains(objectContextKey))
{
HttpContext.Current.Items.Add(objectContextKey, new tradeEntities());
}
return HttpContext.Current.Items[objectContextKey] as tradeEntities;
}
}
}
然后我使用myEntities et = p.ObjectContextPerHttpRequest.Context;
在我的网站上的某个地方,我需要获得产品。。。为了做到这一点,我使用这个:
public List<tProducts> returnProductsFromSubcategory(int subcategoryID)
{
var prod = from p in et.tProducts
from c in et.tCompany
where (c.companyID == p.fk_companyID && c.enable == true)
where (p.subCategoryID == subcategoryID && p.enable == true)
select p;
//et.Connection.Close();
return prod.ToList(); //Here comes an Exception The connection's current state is broken.
}
有时它还可以,但有时我会遇到一个例外。
System.InvalidOperationException命令的执行需要打开且可用的连接。连接的当前状态为破碎的
我不确定出了什么问题。我已经读到我应该实现dispose函数,但在哪里添加它以及如何实现它?
非常感谢您的帮助。
Martin
要处理对象上下文,您应该将查询包装在using
语句中。
public List<tProducts> returnProductsFromSubcategory(int subcategoryID)
{
using(var et = new tradeEntities())
{
var prod = from p in et.tProducts
from c in et.tCompany
where (c.companyID == p.fk_companyID && c.enable == true)
where (p.subCategoryID == subcategoryID && p.enable == true)
select p;
return prod.ToList();
}
}
这将自动处理对象上下文,并正确关闭与数据库的连接,使其能够返回到连接池。我建议将您的所有查询封装在using
块中。
您必须处理您的上下文。您可以使用"using"运算符,也可以调用"Dispose"方法
在这里,我们将更详细地讨论这个问题。