【问题标题】:C# handle multiple database types?C# 处理多种数据库类型?
【发布时间】:2009-09-01 23:21:52
【问题描述】:

我有一个需要能够使用 sqlite3 数据库或 mysql 数据库的应用程序。客户希望能够在两者之间进行选择(显然,一种是本地的,一种是在线的)。

我的想法是创建一个包含所有常用方法(ExecuteReader、ExecuteScalar 等)的数据库接口,然后创建一个扩展此接口的 SQLite3Database 类和一个扩展它的 MySQLDatabase 类。在应用初始化时,它将根据客户选择的设置创建数据库接口。

但是,如果我这样做,那么我将无法访问服务器资源管理器以及添加数据集的简单方法等。

所以我的问题是......我是否以正确的方式解决这个问题?我错过了更好的选择吗?如果没有,我如何在创建数据连接点 VIA 代码时访问服务器资源管理器的可用性?

谢谢。

【问题讨论】:

    标签: c# mysql database sqlite


    【解决方案1】:

    如果应用程序不平凡,那么我会说你应该看看 ORM 工具。

    它不会解决 100% 的问题,但它会让你到达那里。例如,NHibernate 是我当前项目的 ORM,数据库特定的代码很少。

    【讨论】:

    • 同意。不要重新发明轮子。评估几个 O/RM,然后选择一个适合您的需求。
    【解决方案2】:

    您可以使用 OR/M 为您抽象出所有数据库细节。

    或者,您可以为您的应用程序创建自己的数据访问层。您可以编写一些 DAL 接口(其中包含例如“GetPersonById”方法)。然后,您可以为这些接口编写几个实现:

    • 一种针对 MySQL 的实现
    • 另一个以 SqlLite3 为目标的实现。

    在您的应用程序中,您针对接口进行编程,而不是直接针对实现进行编程。 编写一个工厂类来实例化这些接口的正确实现(例如基于配置设置)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-27
      • 2019-07-01
      • 2015-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多