我正在开发的产品需要支持不同的数据库类型。一开始需要支持SQL Server和Oracle,但未来可能需要支持IBM DB2和Postgre SQL。
并且该产品将需要为可能具有略微不同架构的不同客户工作。例如,一个带有SQL Server的客户端上的列名可能是_ID
,而在另一个带有Oracle的客户端上,它可能是I_ID
.
除了列名之外,一般模式将是相同的。它们都可能映射到同一个对象。但是,可能会有一些特定于每个客户的额外列。但是,这些不需要映射到对象。可以使用更简单的方式在Master-Detail场景中检索它们。
我想使用 ORM,因为我们需要支持不同类型的数据库提供程序。但据我所知,ORM 不适合在运行时创建映射。
为了支持这些请求(摘要):
- 每个客户的列名可能不同,但除了名称之外,它们几乎是相同的列。
- 每个客户的数据库提供商可能不同。
- 每个客户可能有额外的列。
- 编辑:程序应该能够通过在运行时更改配置来支持新数据库。
为此类规范创建数据访问的好方法是什么?有没有办法用 ORM 做到这一点?或者我是否需要编写特定于每个数据库的代码来支持这种情况?我是否有任何其他选择可以比直接使用 ADO.NET 更容易?
编辑:我认为我的问题写得太宽泛了,并没有清楚地解释它,对此感到抱歉。问题是我不会创建数据库。它们将已经创建,并且程序应该能够通过在运行时配置程序来使用新数据库。我无法控制数据库。
另一件事是,当然可以通过在程序中创建SQL语句来实现,但这确实很麻烦。所有这些提供程序都有稍微不同的规则和不同的 SQL 实现,所以工作量很大。我想知道是否可以使用 ORM 之类的东西来让我更轻松。
编辑 2:我完全意识到这是一种愚蠢的做事方式,它显示了糟糕的设计决策。但是我花了很多时间试图说服我的公司不要这样做。他们不想改变自己的思维方式,因为实习生会这样告诉他们。所以任何帮助将不胜感激。