与数据库无关的ASP.NET应用程序?

与数据库无关的ASP.NET应用程序?,asp.net,orm,ado.net,data-access-layer,database-engine,Asp.net,Orm,Ado.net,Data Access Layer,Database Engine,我正在开发的ASP.NET应用程序的一个要求是与数据库无关;也就是说,能够与大量数据库引擎对话,而不必对代码进行重大更改。我已经知道解决方案的第一部分涉及在接口后面抽象DAL(数据访问层),这使得在不更改代码的情况下替换DAL成为可能,但我面临的问题是如何实现DAL 这方面的研究一直没有定论,但它告诉我我有两个选择: 使用ORM(如实体框架或Dapper) 完整地写 在ADO.NET中 实体框架很简单,但似乎一旦我生成了模型,EF就不允许我更改它所针对的DB引擎。OTOH,在ADO.NET中

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

这方面的研究一直没有定论,但它告诉我我有两个选择:

  • 使用ORM(如实体框架或Dapper)
  • 完整地写 在ADO.NET中
实体框架很简单,但似乎一旦我生成了模型,EF就不允许我更改它所针对的DB引擎。OTOH,在ADO.NET中编写许多DAL(每个目标引擎一个DAL)允许我具有这种灵活性,但我坚持从头开始编写所有DAL

因此,我有以下问题:

  • 有没有办法让EF在运行时与不同的DB引擎对话?
  • 如果没有,是否有成熟、稳定的ORM支持多个动态DB引擎?

  • 提前感谢。

    实体框架似乎可以-


    然而,对我来说,这听起来像是灾难的秘诀。我会使用ANSI SQL自己编写它,确保我在所有数据库中的表、列和数据类型匹配并具有相同的行为——以及外键、自动键生成等。然后测试所有内容并祈祷。

    看起来实体框架可以做到-


    然而,对我来说,这听起来像是灾难的秘诀。我会用ANSI SQL自己编写,确保所有数据库中的表、列和数据类型都匹配并具有相同的行为——以及外键、自动键生成等。然后测试所有内容并祈祷。

    所以我几乎被ADO.NET和ANSI SQL卡住了?幸运的是,我不需要使用很多特殊的特性(最多是视图和存储过程,在任何情况下,我都可以在DAL后面抽象这些特性)。我唯一会错过的就是EF对FKs的支持。所以我几乎被ADO.NET和ANSI SQL所困扰?幸运的是,我不需要使用很多特殊的特性(最多是视图和存储过程,在任何情况下,我都可以在DAL后面抽象这些特性)。我唯一会想念的就是英孚对FKs的支持。