企业库管理连接

时间:2010-11-26 15:09:06

标签: c# asp.net sql-server enterprise-library

我正在使用c#构建应用程序,我决定将企业库用于DAL(SQL Server)。

我不记得在哪里,但我读过一篇关于EntLib的文章,其中说连接是自动关闭的。

是真的吗?

如果没有,管理中间层连接的最佳方法是什么? 在每种方法中打开和关闭?

以上是我如何使用EntLib

的示例方法
public DataSet ReturnSomething
{
    var sqlStr = "select something";
    DbCommand cmd = db.GetSqlStringCommand(sqlStr);
    db.AddInParameter(cmd, "@param1", SqlDbType.BigInt, hotelID);
    db.AddInParameter(cmd, "@param2", SqlDbType.NVarChar, date);
    return db.ExecuteDataSet(cmd);

}

提前致谢。

3 个答案:

答案 0 :(得分:2)

ExecuteDataSet方法返回包含所有数据的DataSet对象。这为您提供了自己的本地副本。对ExecuteDataSet的调用会打开一个连接,填充一个DataSet,并在返回结果之前关闭连接

了解更多信息:

http://msdn.microsoft.com/en-us/library/ff648933.aspx

答案 1 :(得分:0)

我认为您应该使用类似于Façade的静态类,它将为您的库子系统提供正确的连接。

public static class SystemFacade {
    // Used as a subsystem to which the connections are provided.
    private static readonly SystemFactory _systemFactory = new SystemFactory();

    public static IList<Customer> GetCustomers() {
        using (var connection = OpenConnection(nameOfEntLibNamedConnection))
            return _systemFactory.GetCustomers(connection);
    }

    public static DbConnection OpenConnection(string connectionName) {
        var connection = 
            // Read EntLib config and create a new connection here, and assure
            // it is opened before you return it.

        if (connection.State == ConnectionState.Closed)
            connection.Open();

        return connection;            
    }
}

internal class SystemFactory {
    internal IList<Customer> GetCustomers(DbConnection connection) {
        // Place code to get customers here.
    }
}

使用此代码:

public class MyPageClass {
    private void DisplayCustomers() {
        GridView.DataSource = SystemFacade.GetCustomers();
    }
}

在此代码示例中,您有一个静态类,它提供类库的功能和特性。 Façade类用于为用户提供所有可能的操作,但您不希望因使用什么连接而头疼。等等。您只需要基础数据存储区之外的客户列表。然后,拨打GetCustomers就可以了。

Façade是一个“智能”类,它知道从何处获取信息,因此相应地创建连接并从子系统工厂订购客户。工厂按照要求进行操作,获取可用的连接并检索客户,而不会询问任何其他问题。

这有帮助吗?

答案 2 :(得分:0)

是的,EntLib为您关闭连接(实际上它将它们释放回连接池)。这是我们最初开始使用EntLib的主要原因。

然而,对于我们现在已经开始使用实体框架的所有新开发,我们发现效率更高。