使用NHibernate在同一ASP.NET应用程序中支持Oracle和SQL Server的建议

时间:2010-04-13 00:18:30

标签: sql-server oracle nhibernate

我们的客户希望在下一个项目中同时支持SQL Server和Oracle。我们的经验来自.NET / SQL Server平台。我们将聘请Oracle开发人员,但我们关心的是DataAccess代码。 NHibernate会让数据库引擎对我们透明吗?我不这么认为,但我想听听面临类似情况的开发人员。

我知道这个问题有点模糊,因为我没有Oracle经验,所以我不知道会发现什么问题。

2 个答案:

答案 0 :(得分:8)

通过遵循一些基本实践,您可以轻松使用NHibernate使您的应用程序与数据库无关:

  • 首先设计对象模型。
  • 不要使用任何特定于数据库的代码。您需要具有良好C#经验的人,而不是Oracle开发人员。不要依赖触发器,存储过程等东西。
  • 让NHibernate至少在最初生成数据库模式(您可以稍后调整索引之类的内容)它将为每个数据库选择最佳可用数据类型。
  • 使用与数据库无关的POID生成器(hiloguid)代替序列或标识。
  • 尽量避免使用SQL。 HQL和Linq在99%的情况下都能正常工作。
  • 避免所有目标数据库都不支持的NH功能(例如,Future,MultiCriteria等)

NHibernate有一个很棒的社区。除了在此处发帖,您始终可以在http://groups.google.com/group/nhusers中提出您的问题。

答案 1 :(得分:1)

要考虑三件事 - ISession对象,生成的SQL查询以及映射到表的普通旧clr对象。

NHiberante将根据所选的数据库方言生成所需的SQL查询。如果将NHibernate配置为使用SQL Server方言,它将生成SQL Server正确的SQL语句。这可以在运行时根据配置轻松动态配置。

您还需要配置会话以连接到正确类型的数据库。同样,各种配置方法可以在运行时支持动态ISession创建。

映射到表的实际数据对象不需要根据数据库选择进行更改。 NHibernates的优势之一是它通过(相当)简单的配置更改和一些前期架构思想来支持多个数据库所提供的灵活性。

有关如何从NHibernate的创建和使用中抽象出底层数据库的一些示例,请参阅http://codebetter.com/blogs/karlseguin/archive/2009/03/30/using-nhibernate-with-multiple-databases.aspx