关于更改应用程序以支持多个数据库后端的建议

Advice on changing an app to support multiple database backends

我有一个用 C# 编写的应用程序,它目前混合使用数据集和一些使用 Advantage 数据库服务器的硬编码 SQL statements/stored 过程。

我现在希望我的应用程序也支持 MS-SQL。

我有几个选择:-

1) 分支源代码并手动进行语法更改以启用 MS-SQL 支持。这样做的缺点显然是多个代码库。

2) 将所有数据库代码移动到 2 个独立的库中(一个用于 ADS,一个用于 MS-SQL),并根据数据库为最终用户提供正确的库。我不确定如何设置它,理想情况下我希望在我的 VS 解决方案中同时拥有这两个库项目,并且能够在使用它们之间切换,最好是在调试和 运行 时间。这可能吗?

3) 开始使用支持两个数据库后端的 DAL。如果我要开始使用 EF,是否可以最初基于现有 ADS 数据库生成架构,然后在 运行 时间将连接切换到使用相同架构的 MS-SQL 数据库,还是为每个数据库创建两个 contexts/schemas 并以某种方式在 运行 时间切换它们会更好,即是否可以通过配置设置创建一个 returns 相关上下文的方法,例如

dbcontext = new GetDBContext();

DbContext  GetDBContext()
{
   if( configsetting == "ADS")

      return new AdsDBContext();

   else

     return new MSSQLDBContext();

}

我想做的是进行增量更改,以便程序在现有 ADS 数据库上继续 运行,同时慢慢适应 MS-SQL/other 数据库后端。

此致

麦克

如果您的应用程序不太复杂,我建议您使用 DbProviderFactoryclass. Here 您会找到有关如何注册 .NET 提供程序以及如何使用它们的分步示例。 希望对你有帮助。

第一种情况是一个糟糕的选择。 最好的方法是第三种情况,但首先你必须将所有原始 statements/queries 转换为 ORM。这可能很难。这取决于它们的复杂性、现有模型结构和 ORM 的限制。这种方式很可能会失败,因为最终您需要重写项目的重要部分(这同样取决于现有代码的结构)。如果没有,那就走这条路,否则第二种情况是中庸之道。