【问题标题】:proper design to share database connections across static classes?跨静态类共享数据库连接的正确设计?
【发布时间】:2009-04-21 23:31:53
【问题描述】:

我有一个带有许多静态实用程序类的 c# dll。他们都需要数据库访问,目前每个类都有自己的连接。这变得很麻烦,我想要一个连接的“提供者”,所以一个类可以做类似 ConnProvider.Query(...) 的事情,其中​​ ConnProvider 是一个所有实用程序类都可以访问的静态类。我想 ConnProvider 必须管理某种连接池,但我不完全确定这是否是实现此功能的正确方法,如果是,内部结构会如何。我在正确的轨道上吗?这不是基于网络的,线程安全不是必需的(但对未来来说会很好),并且只有少数应用程序/机器将使用这个 dll,如果这有助于简化它的话。

【问题讨论】:

    标签: c# database connection-pooling


    【解决方案1】:

    您不应该编写自己的连接池。框架的已经足够好了。

    您编写的任何连接提供程序实用程序都应该只是使用您拥有的任何配置信息来创建连接。本质上它只是封装了查询字符串。

    每当您进行查询时,调用提供程序以创建连接、完成工作并关闭连接。让框架处理池化物理连接。

    【讨论】:

    • 澄清一下,我是否必须专门做任何事情来利用内置的连接池?或者只要我的 conn 字符串相同,它是自动的吗?问题是我在实现一些辅助函数的 SqlConnection 上有一个包装器,所以我不确定如何正确处理
    • 它是自动的。你真的需要你的包装类型吗?它是否添加任何状态?如果没有,并且如果您使用的是 C# 3,您可能希望将它们设为扩展方法。
    【解决方案2】:

    在您的情况下,是否可以让所有帮助程序类从具有连接的 ConnectionBase 子类化?

    【讨论】:

      【解决方案3】:

      让您的“ConnProvider”为每个查询创建新连接,并让 ADO.NET 和您的 RDBMS 管理连接池。它们已经为您设置和优化。

      【讨论】:

        【解决方案4】:

        不要尝试自己处理连接池。 .NET 肯定比以往任何时候都更擅长。您可以将其作为连接的某种单例模式 db-class 来解决。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-07-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-01-24
          • 2023-03-03
          • 1970-01-01
          相关资源
          最近更新 更多