我在DAL中有edmx,它自动为所有存储过程创建函数和复杂类型。我可以使用实体对象调用存储过程。
现在,在业务逻辑层中,我正在为类级别创建DAL对象。 即
public class ProjectBO //Business object
{
ProjectEntities Entities = new ProjectEntities();
public IEnumerable<usp_Project_Team_GetTeam_Result> usp_Project_Team_GetTeam(string strAssociateId)
{
return Entities.usp_Project_Team_GetTeam(strAssociateId);
}
}
我从处理程序中调用此函数。所以我的问题是,因为我已经在类级别创建了实体的对象,所以一旦创建了对象就会打开连接并且它将在整个过程中保持打开状态?
是否有任何等效的命令,如connection.close()
,以便在不需要打开它时关闭连接?!或者,一旦从db中获取数据,edmx是否会打开和关闭连接?
答案 0 :(得分:1)
您的实体变量属于 ProjectBO 实例的范围。因此,当您的垃圾收集器运行时,您的数据库连接将被清除。不理想。
更好的选择是明确地给它一个更窄的范围:
public IEnumerable<usp_Project_Team_GetTeam_Result> usp_Project_Team_GetTeam(string strAssociateId)
{
using (ProjectEntities Entities = new ProjectEntities())
{
return Entities.usp_Project_Team_GetTeam(strAssociateId);
}
}
通过这种方式,您的连接将在您期望的位置打开和关闭。