Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 异常使用实体框架时连接的当前状态已断开_C#_Asp.net_Entity Framework_Linq To Entities - Fatal编程技术网

C# 异常使用实体框架时连接的当前状态已断开

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

我对EF很陌生。。。目前我正在用EF在asp.net中开发一个网站,我有时会遇到关于连接的异常情况

我根据我编写的程序阅读了这篇文章:

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。。。我的问题似乎被遗忘了。。。我将非常感谢任何提示,我可以如何计划处置行动。谢谢