【问题标题】:how to use the edmx and functions created by it for calling stored procs?如何使用 edmx 及其创建的函数来调用存储过程?
【发布时间】:2013-10-16 03:41:36
【问题描述】:

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

【问题讨论】:

    标签: c# asp.net .net data-binding edmx


    【解决方案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);
       }
    }
    

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

    【讨论】:

    • 感谢 LachlanB,如果我说 80 多个函数,使用这种显式方式是否会更好,考虑到它会增加另一个 200loc,并进一步澄清,因为我正在为实体创建对象在课堂级别,数据库连接会一直保持打开状态吗??
    • 一旦实体类超出范围,就在第一个 } 括号之后,数据库连接将关闭。
    • 嗨 LachlanB,如果我们使用公共 IEnumerable usp_Project_Team_GetTeam(string strAssociateId) { ProjectEntities Entities = new ProjectEntities() return Entities.usp_Project_Team_GetTeam(strAssociateId),我会收到“对象已处置”错误; }
    • 返回一个 List 并预先将其转换为一个列表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-16
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 2017-04-23
    • 2019-05-07
    相关资源
    最近更新 更多