可插拔数据库层的建议

时间:2011-01-30 20:34:23

标签: c# architecture data-access-layer

我目前正在开发一个使用SQL Server数据库存储数据的软件项目。由于有一些计划要从SQL Server迁移到Oracle,因此其中一个要求是构建可插拔的数据库层。

所以我的问题是最好的方法是什么?

4 个答案:

答案 0 :(得分:1)

我建议您使用NHibernate作为数据层。有了它,您可以轻松地更换配置,以使用您想要的几乎任何数据库驱动程序。

NHibernate对MsSQL和Oracle都有很好的支持。

您可以使用Hibernate查询语言(HQL)编写所有查询,这将与方言无关。另一种选择是使用NHibernate 3中的linq提供程序来获得强类型数据访问。

正如其他人提到的,我还建议使用存储库模式并注入工作单元或SessionFactory。

修改:Oracle现已发布其实体框架提供商的测试版:http://thedatafarm.com/blog/data-access/oracle-entity-framework-beta-released-today/

1http://nhforge.org/Default.aspx##标题##

答案 1 :(得分:1)

我建议使用Entity Framework,比NHibernate更容易,并且成熟得非常快。对于EF中的oracle支持,您需要oracle provider

除了使用Entity框架之外,我还建议使用 Repository Pattern 等模式。这样,您可以使用依赖注入来更改您选择的实现。您的应用程序独立于数据库或ORM本身。所以你也可以使用NHibernate。

答案 2 :(得分:1)

你有很多选择。一种选择是使用各种对象关系映射器(ORM)框架之一。 NHibernate很受欢迎,但微软的实体框架(第4版)也是一种合理的可能性,并且它与Linq更好地集成,如果这是你感兴趣的东西。

第二个选项(不一定是上述选项)是实现类似Repository模式的东西,并通过存储库层运行所有数据库访问。有些人认为ORM框架是Repository模式的替代品;其他人看到在ORM框架之上添加值的存储库层。存储库为您提供的真正价值是能够交换ORM层。只有你知道这是否是合理的可能性,即使是这样,实现额外的存储库级别可能比将所有内容重新绑定到新的ORM更多。

答案 3 :(得分:0)

如果你想使用ORM方式,你可以使用NHibernate作为alexn建议,或者使用Telerik的OpenAccess ORM。还有用于oracle和其他DBMS的EF提供程序,但它们不是免费的。

如果您想从头开始构建整个DAL,那么请使用Repository模式。为存储库创建接口并为每个数据库创建每个存储库提供程序。 Here是关于的讨论。