当 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();
}
我的问题是,
- 在我的案例中,当数据库连接打开时
- 数据库连接何时关闭?
- 我是否需要使用 using(MyDBEntities dbEntities = new MyDBEntities()) 而不是使用成员变量
- 如果我需要作为问题 #3 使用,我是否需要在每个获取方法中使用 "using" 语句打开连接?
我的数据库连接有时会断开,系统性能会下降,我怀疑我使用了 EF。有人可以告诉我如何使用 EF 吗?
还有一些问题,
连接池如何与 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" />
我正在使用上面的连接字符串,我有上面连接字符串的连接池吗?
如何在 EF 中配置连接
感谢对这些问题的任何帮助。
谢谢朋友们
您的数据访问器是静态成员。
远离使用 static
,因为它可能在页面访问之间存在。不难想象会造成什么样的破坏。
我在执行此操作时遇到了来自上一个页面访问的数据库错误。我不得不挠头。
比较时也使用 ==
而不是 =
。
您不必使用 using
。
我实际上建议你有一个数据访问器,你的 Page_Load
将使用类似 var accessor = new DataAccesssor();
的东西创建,而不是将你的方法与私有构造函数一起使用。
现在您将清楚 MyDbEntities
实例的生命周期。它将限定在您的 Page_Load
函数范围内。
我有一个 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();
}
我的问题是,
- 在我的案例中,当数据库连接打开时
- 数据库连接何时关闭?
- 我是否需要使用 using(MyDBEntities dbEntities = new MyDBEntities()) 而不是使用成员变量
- 如果我需要作为问题 #3 使用,我是否需要在每个获取方法中使用 "using" 语句打开连接?
我的数据库连接有时会断开,系统性能会下降,我怀疑我使用了 EF。有人可以告诉我如何使用 EF 吗?
还有一些问题,
连接池如何与 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" />
我正在使用上面的连接字符串,我有上面连接字符串的连接池吗?
如何在 EF 中配置连接
感谢对这些问题的任何帮助。 谢谢朋友们
您的数据访问器是静态成员。
远离使用 static
,因为它可能在页面访问之间存在。不难想象会造成什么样的破坏。
我在执行此操作时遇到了来自上一个页面访问的数据库错误。我不得不挠头。
比较时也使用 ==
而不是 =
。
您不必使用 using
。
我实际上建议你有一个数据访问器,你的 Page_Load
将使用类似 var accessor = new DataAccesssor();
的东西创建,而不是将你的方法与私有构造函数一起使用。
现在您将清楚 MyDbEntities
实例的生命周期。它将限定在您的 Page_Load
函数范围内。