我正在开发的 ASP.NET 应用程序的要求之一是与数据库无关;也就是说,能够与大量数据库引擎通信,而无需对代码进行重大更改。我已经知道解决方案的第一部分涉及在接口后面抽象 DAL(数据访问层),这样就可以在不更改代码的情况下替换 DAL,但我面临的问题是如何实现 DAL。
在这方面的研究一直没有定论,但它告诉我我有两个选择:
- 使用 ORM(如 Entity Framework 或 Dapper)
- 完全用 ADO.NET 编写
实体框架很简单,但似乎一旦我生成模型,EF 将不允许我更改它所针对的数据库引擎。OTOH,在 ADO.NET 中编写许多 DAL(每个目标引擎一个)使我具有这种灵活性,但我坚持从头开始编写所有内容。
所以我有以下问题:
- 有没有办法让 EF 在运行时与不同的数据库引擎对话?
- 如果没有,是否有任何成熟、稳定的 ORM 可以即时支持多个数据库引擎?
提前致谢。