2016-12-08 15 views
2

我正在开发的ASP.NET应用程序的要求之一是要与数据库无关的;也就是说,能够与大量的数据库引擎进行交流,而无需对代码进行重大更改。我已经知道解决方案的第一部分涉及在接口后面抽象DAL(数据访问层),并且可以在不更改代码的情况下替换DAL,但是我面临的问题是如何实现DAL。数据库不可知的ASP.NET应用程序?

研究已经在这方面是非常不确定的,但它告诉我,我有两个选择:

  • 使用ORM(如实体框架或小巧玲珑)
  • 在ADO.NET
  • 完全 写它

实体框架很简单,但似乎一旦生成模型,EF就不会允许我更改其目标数据库引擎。 OTOH在ADO.NET中编写了许多DAL(每个目标引擎都有一个DAL),这使我具有了这种灵活性,但是我一直从头开始编写所有的东西。

所以,我有以下问题:

  1. 有没有一种方法,使EF再跟上运行不同的数据库引擎?
  2. 如果没有,是否有任何支持多个数据库引擎的成熟,稳定的ORM?

在此先感谢。

+0

我不确定你的意思是“在运行时”和“在飞行中”。除了实体框架,Dapper和核心ADO.NET,NHibernate是另一种选择。 它几乎支持所有常用的数据库。它有助于将数据访问层与业务逻辑或应用程序层分开。它被广泛使用和积极开发。负面的一点是它的学习曲线。 –

回答

0

看起来它可能与实体框架 - Same EDMX file for different Providers

但是,对我来说这听起来像一个灾难。我会使用ANSI SQL自己编写它,确保所有数据库中的表,列和数据类型匹配并具有相同的行为 - 以及外键,自动密钥生成等。然后测试所有内容并跨越我的手指。

+0

所以我几乎坚持使用ADO.NET和ANSI SQL?幸运的是,我不需要使用许多特殊功能(最多可以在任何情况下都可以在DAL后面提取视图和存储过程)。我唯一会想念的是EF对FK的支持。 –

相关问题