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

Fel*_*ani 5 .net c# nhibernate nhibernate-mapping fluent-nhibernate

我有一个使用C#NHibernate它将支持的应用程序SQL Server 2008,SQL 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();
Run Code Online (Sandbox Code Playgroud)

对于Oracle:

Id(x => x.Id).GeneratedBy.Sequence("SQ_Customer");
Run Code Online (Sandbox Code Playgroud)

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

Tam*_*eer 8

好吧,"Native"会根据使用的DB自动选择Identity,sequence或HILO.

使用这个xml映射它应该使用标识或序列,sq_customer如果它的Oracle:

  <generator class="native" >
    <param name="sequence">sq_customer</param>
  </generator>
Run Code Online (Sandbox Code Playgroud)

这篇文章进一步描述了事情

  • 这是正确的答案.翻译为Fluent:`Id(x => x.Id).GeneratedBy.Native("SQ_Customer");` (3认同)