共享对象之间的数据库连接

时间:2016-12-12 07:37:53

标签: c# database wcf database-connection

我经常多次改变我的设计。

我有两个课程Shop& Source
每个Shop都有IList<Product>(约1000件商品),
并且SourceIList<Item>(约200),
所有类都需要在同一个数据库上执行某些操作。

首先,我与所有对象共享一个开放的DbConnection
在构建我的 WebService 时,它变得有问题,
我缓存了开放静态DbConnection(听起来很糟糕)并使用它 但是当测试多个请求时,当连接偶尔关闭并且ExecuteReader()抛出(没有使用MARS)时,它开始出现问题。

阅读This以及其他许多建议依赖连接池的来源 我在查询之前替换了我的代码以打开连接,并在完成后处理它 但我注意到表现有所降低 我可以查看游泳池的功能(或者不是吗?)

问题:如何监控我的SqlConnection池?

问题:是否有任何其他设计可以在这些对象之间共享此连接。

非常感谢。

1 个答案:

答案 0 :(得分:1)

性能下降可能与您管理数据库连接的方式无关。通常,重新创建连接不是一项昂贵的操作,.NET将为您集中/管理它们。您应该能够根据需要创建任意数量的连接,只需确保正确处理它们即可。您可能需要考虑基础查询或应用程序的其他方面的问题。

  

如何监控我的SqlConnection池?

  

是否还有其他设计可以在这些设备之间共享此连接   对象。

你是如何阅读连接字符串的?这本身可能是静态的,但我仍然依赖于连接池(正如你在研究中指出的那样)。你正确处理连接吗?

示例(静态连接字符串):

    public static readonly string ConnectionString connString = ConfigurationManager.ConnectionStrings["YOURCONNECTION"].ConnectionString.ToString();

    private void TestMethod()
    {
        using (var dbConn = new SqlConnection(connString)) {
            string query = "select ....";
            using (var dbCommand = new SqlCommand(query, dbConn)) {
                ...
            }
        }
    }