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

时间:2015-02-26 12:03:25

标签: c# .net sql-server entity-framework advantage-database-server

我有一个用C#编写的应用程序,目前正在使用数据集和一些使用Advantage Database Server的硬编码SQL语句/存储过程。

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

我有几个选择: -

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

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

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

dbcontext = new GetDBContext();

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

      return new AdsDBContext();

   else

     return new MSSQLDBContext();

}

我想要做的是进行增量更改,以便程序继续在现有ADS数据库上运行,同时慢慢地将其调整为MS-SQL /其他数据库后端。

此致

麦克

2 个答案:

答案 0 :(得分:1)

如果您的申请不是太复杂,我建议您使用DbProviderFactory课程。 Here您将找到有关如何注册.NET提供程序以及如何使用它们的分步示例。 希望它有所帮助。

答案 1 :(得分:1)

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