【发布时间】:2011-06-18 05:41:12
【问题描述】:
我目前正在开发一个使用 SQL Server 数据库存储数据的软件项目。由于有一些计划从 SQL Server 迁移到 Oracle,因此要求之一是构建可插拔的数据库层。
所以我的问题是最好的方法是什么?
【问题讨论】:
标签: c# architecture data-access-layer
我目前正在开发一个使用 SQL Server 数据库存储数据的软件项目。由于有一些计划从 SQL Server 迁移到 Oracle,因此要求之一是构建可插拔的数据库层。
所以我的问题是最好的方法是什么?
【问题讨论】:
标签: c# architecture data-access-layer
我建议将NHibernate 用于您的数据层。有了它,您可以轻松地更换配置以使用您想要的几乎任何数据库驱动程序。
NHibernate 对 MsSQL 和 Oracle 都有很好的支持。
您可以使用与方言无关的 Hibernates 查询语言 (HQL) 编写所有查询。另一种选择是使用 NHibernate 3 中的 linq 提供程序来获取强类型数据访问。
正如其他人所提到的,我还建议使用存储库模式并注入工作单元或 SessionFactory。
编辑:Oracle 现在已经发布了他们的实体框架提供者的测试版:http://thedatafarm.com/blog/data-access/oracle-entity-framework-beta-released-today/
【讨论】:
我建议使用Entity Framework,它比NHibernate 容易得多,并且成熟得非常快。对于 EF 中的 oracle 支持,您需要oracle provider。
除了使用实体框架,我建议使用诸如 Repository Pattern 之类的模式。这样,您可以使用 依赖注入 来更改您选择的实现。您的应用程序变得独立于数据库或 ORM 本身。因此,如果您愿意,也可以使用 NHibernate。
【讨论】:
如果您想采用 ORM 方式,您可以按照 alexn 的建议使用 NHibernate,或者 Telerik 的 OpenAccess ORM。也有适用于 oracle 和其他 DBMS 的 EF 提供程序,但它们不是免费的。
如果您想从头开始构建您的整个 DAL,请使用存储库模式。为存储库创建一个接口并为每个数据库创建每个存储库提供程序。 Here的讨论。
【讨论】:
你有很多选择。一种选择是使用各种对象关系映射器 (ORM) 框架之一。 NHibernate 是一个流行的,但微软的实体框架(在 v4 中)也是一个合理的可能性,它与 Linq 更好地集成,如果你感兴趣的话。
第二个选项(不一定排除上述)是实现类似于存储库模式的东西,并通过存储库层运行所有数据库访问。有些人将 ORM 框架视为 Repository 模式的替代品;其他人看到存储库层在 ORM 框架之上增加了价值。存储库给您的真正价值是交换 ORM 层的能力。只有您知道这是否是合理的可能性,即使是,实现额外的存储库级别可能比将所有内容重新绑定到新的 ORM 需要更多的工作。
【讨论】: