我有一个用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 /其他数据库后端。
此致
麦克
答案 0 :(得分:1)
如果您的申请不是太复杂,我建议您使用DbProviderFactory课程。 Here您将找到有关如何注册.NET提供程序以及如何使用它们的分步示例。 希望它有所帮助。
答案 1 :(得分:1)
第一种情况是不好的选择。 最好的方法是第三种情况,但首先你必须将所有原始语句/查询转换为ORM。这可能很难。这取决于它们的复杂性,现有的模型结构和ORM的局限性。很可能你会以这种方式失败,因为最终你需要重写项目的重要部分(同样,它取决于现有代码的结构)。如果没有,那么就这样走,否则第二种情况就是中庸之道。