0

我在 DAL 中有 edmx,它为所有存储的过程自动创建了函数和复杂类型。我可以使用实体对象调用存储的过程。

现在在业务逻辑层中,我正在为类级别的 DAL 创建一个对象。IE

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()在不需要打开连接时关闭连接?!或者一旦从数据库中获取数据,edmx 是否会打开和关闭连接?

4

1 回答 1

1

您的Entities变量在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);
   }
}

这样,您的连接将在您期望的位置打开和关闭。

于 2013-10-16T04:47:06.877 回答