实体框架连接获得打开时&关闭

时间:2015-03-14 06:19:17

标签: c# asp.net entity-framework connection-pooling

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

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. 我是否需要使用(MyDBEntities dbEntities = new MyDBEntities())而不是使用成员变量
  4. 如果我需要用作问题#3,我是否需要使用"使用"打开连接?每个获取方法中的语句?
  5. 我的数据库连接有时会中断,系统性能会降低,我怀疑是否使用了EF。有人可以建议我如何使用EF吗?

    还有一些问题,

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

      的connectionString ="元数据= 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"&# 34;的providerName =" System.Data.EntityClient" />

    2. 我使用上面的连接字符串,我是否有连接池与上面的连接字符串?

    3. 如何在EF中配置连接

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

1 个答案:

答案 0 :(得分:1)

您的dataaccessor是一个静态成员。

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

当我这样做时,我从上一页访问中得到了数据库错误。我不得不抓了很多头。

在比较时使用==代替=

您不必使用using

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

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