当 Entity Framework 连接打开和关闭时

When Entity Framework Connection Gets Open & Closed

我有一个 asp.net Web 表单应用程序,它使用 EF 进行所有数据库活动。当页面加载时,我必须从不同的表中获取大量数据。我有一个 DataAccessor class,其中我有一个 Entity Framework DbContext (MyDBEntities) 的成员变量。请参阅下面的 class 定义。

public class DataAccessor
{
    public static DataAccessor Instance = new DataAccessor();
    private MyDBEntities dbEntities = new MyDBEntities();

    private DataAccessor() 
    {
    }

    public FetchTable_1_Data()
    {
        return dbEntities.Table1.Where( x => x.Id = something).List();
    }

    public FetchTable_2_Data()
    {
         return dbEntities.Table2.Where( x => x.Id = something).List();
    }

    public FetchTable_n_Data()
    {
         return dbEntities.TableN.Where( x => x.Id = something).List();
    }

}

在页面加载中使用如下数据访问器

Page_Load()
{
   Repeater1.DataSource = DataAccessor.Instance.FetchTable_1_Data();
   Repeater1.DataBind();

   Repeater2.DataSource = DataAccessor.Instance.FetchTable_2_Data();
   Repeater2.DataBind();
}

我的问题是,

  1. 在我的案例中,当数据库连接打开时
  2. 数据库连接何时关闭?
  3. 我是否需要使用 using(MyDBEntities dbEntities = new MyDBEntities()) 而不是使用成员变量
  4. 如果我需要作为问题 #3 使用,我是否需要在每个获取方法中使用 "using" 语句打开连接?

我的数据库连接有时会断开,系统性能会下降,我怀疑我使用了 EF。有人可以告诉我如何使用 EF 吗?

还有一些问题,

  1. 连接池如何与 EF 一起使用?

    connectionString="metadata=res:///ReviewsDb.csdl|res:///ReviewsDb.ssdl|res://*/MyDb.msl;provider=System.Data.SqlClient;provider connection string="data source=SERVER;initial catalog=MyDB;persist security info=True;user id=sa;password=mypwd;multipleactiveresultsets=True;application name=EntityFramework"" providerName="System.Data.EntityClient" />

  2. 我正在使用上面的连接字符串,我有上面连接字符串的连接池吗?

  3. 如何在 EF 中配置连接

感谢对这些问题的任何帮助。 谢谢朋友们

您的数据访问器是静态成员。

远离使用 static,因为它可能在页面访问之间存在。不难想象会造成什么样的破坏。

我在执行此操作时遇到了来自上一个页面访问的数据库错误。我不得不挠头。

比较时也使用 == 而不是 =

您不必使用 using

我实际上建议你有一个数据访问器,你的 Page_Load 将使用类似 var accessor = new DataAccesssor(); 的东西创建,而不是将你的方法与私有构造函数一起使用。

现在您将清楚 MyDbEntities 实例的生命周期。它将限定在您的 Page_Load 函数范围内。