使用NHibernate映射Sql Server Identity和Oracle Sequence的实体

时间:2013-06-20 12:27:30

标签: c# .net nhibernate fluent-nhibernate nhibernate-mapping

我有一个使用C#NHibernate的应用,它将支持SQL Server 2008SQL Server 2012Oracle。我一直在使用流利的nhibernate来映射我的实体,我对如何映射ID有一些疑问。 Oracle仅支持Sequence,仅SQL Server 2008身份和Sql Server 2012。我想在Sql Server(2008和2012)中使用Identity和Oracle with Sequence在相同的代码上进行映射。

我应该如何映射ID以适用于所有数据库?

如果我在流畅的映射代码上有一些IF语句,那也没关系。看我的代码进行映射:

对于SQL:

Id(x => x.Id).GeneratedBy.Native();

对于Oracle:

Id(x => x.Id).GeneratedBy.Sequence("SQ_Customer");

PS:我不想要任何解决方法来实现它。我想要一个NHibernate/Fluent-NHibernate解决方案来映射它。

1 个答案:

答案 0 :(得分:8)

嗯,“Native”会根据使用的数据库自动选择Identity,sequence或HILO。

使用此xml映射,如果是Oracle,则应使用标识或序列sq_customer

  <generator class="native" >
    <param name="sequence">sq_customer</param>
  </generator>

This post进一步描述了事情。