2011-01-30 69 views
3

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

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

回答

1

您有很多选择。一种选择是使用各种对象关系映射器(ORM)框架之一。 NHibernate是一个非常流行的版本,但微软的Entity Framework(v4版本)也是一个合理的可能性,并且它与Linq更好地集成在一起,如果这是你感兴趣的东西。

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

1

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

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

您可以将所有查询写入Hibernates查询语言(HQL),这将是方言不可知的。另一种选择是在NHibernate 3中使用linq提供程序来获取强类型的数据访问。

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

编辑:甲骨文现在已经发布了自己的实体框架提供的测试:http://thedatafarm.com/blog/data-access/oracle-entity-framework-beta-released-today/

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

+1

如果计划迁移到Oracle,NHibernate将是更好的选择。实体框架,只有第三方支持Oracle,并且工作不太好。 – 2011-01-30 20:45:13

+0

@iCe我完全同意你的看法。 – alexn 2011-01-30 20:45:44

1

我建议使用Entity Framework,比NHibernate的相当容易,速度非常快成熟了。对于EF中的oracle支持,您需要oracle provider

随着使用实体框架,我建议使用模式,如存储库模式。这样,您可以使用依赖注入来更改您选择的实现。您的应用程序独立于数据库或ORM本身。所以如果你愿意,你也可以使用NHibernate。

0

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

如果您想从头开始构建整个DAL,则需要使用Repository模式。为存储库创建一个接口并为每个db创建每个存储库提供程序。 Here的讨论。