C# 异常使用实体框架时连接的当前状态已断开
我对EF很陌生。。。目前我正在用EF在asp.net中开发一个网站,我有时会遇到关于连接的异常情况 我根据我编写的程序阅读了这篇文章:C# 异常使用实体框架时连接的当前状态已断开,c#,asp.net,entity-framework,linq-to-entities,C#,Asp.net,Entity Framework,Linq To Entities,我对EF很陌生。。。目前我正在用EF在asp.net中开发一个网站,我有时会遇到关于连接的异常情况 我根据我编写的程序阅读了这篇文章: public static class ObjectContextPerHttpRequest { public static tradeEntities Context { get { string objectContextKey = HttpContext.Current.GetHas
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语句中
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”方法。
这个问题将以更详细的方式进行讨论。您必须处理您的上下文。您可以使用“using”运算符,也可以调用“Dispose”方法。
这个问题将以更详细的方式进行讨论。一旦不再需要查询数据库,就必须在每次使用ObjectContext的请求处理中处理它。这就是为什么这种使用静态上下文访问器的方法不是很有用的原因。好的,如何处理?我能不能动一下?Ups。。。我的问题似乎被遗忘了。。。我将非常感谢任何提示,我可以如何计划处置行动。谢谢。当您不再需要查询数据库时,必须在每次使用ObjectContext的请求处理中处理ObjectContext。这就是为什么这种使用静态上下文访问器的方法不是很有用的原因。好的,如何处理?我能不能动一下?Ups。。。我的问题似乎被遗忘了。。。我将非常感谢任何提示,我可以如何计划处置行动。谢谢