C# 使用NHibernate映射Sql Server标识和Oracle序列的实体

C# 使用NHibernate映射Sql Server标识和Oracle序列的实体,c#,.net,nhibernate,fluent-nhibernate,nhibernate-mapping,C#,.net,Nhibernate,Fluent Nhibernate,Nhibernate Mapping,我有一个使用C和NHibernate的应用程序,它将支持SQLServer2008、SQLServer2012和Oracle。我一直在使用fluent nhibernate映射我的实体,我有一些关于如何映射ID的问题。Oracle仅支持序列,SQL Server 2008仅支持标识,SQL Server 2012两者都支持。我想在Sql Server(2008年和2012年)中映射Identity和Oracle,并在同一代码中映射Sequence 我应该如何映射ID以适用于所有数据库 在我的fl

我有一个使用
C
NHibernate
的应用程序,它将支持
SQLServer2008
SQLServer2012
Oracle
。我一直在使用fluent nhibernate映射我的实体,我有一些关于如何映射ID的问题。Oracle仅支持序列,SQL Server 2008仅支持标识,SQL Server 2012两者都支持。我想在Sql Server(2008年和2012年)中映射Identity和Oracle,并在同一代码中映射Sequence

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

在我的fluent映射代码中是否有if语句并不重要。查找映射的我的代码:

对于SQL:

Id(x => x.Id).GeneratedBy.Native();
对于Oracle:

Id(x => x.Id).GeneratedBy.Sequence("SQ_Customer");
PS:我不希望有任何解决方法来实现它。我需要一个
NHibernate/Fluent NHibernate
解决方案来映射它。

好的,“Native”会根据使用的数据库自动选择标识、序列或HILO

如果其Oracle:

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

SQU客户

进一步说明。

您必须等待数据库给您id,还是可以使用nhibernates HILO generator生成您自己的id?我想使用Guid,但不幸的是我无法更改我的数据库:(这是正确的答案。翻译为Fluent:
id(x=>x.id)。GeneratedBy.Native(“SQ_客户”);
id(x=>x.id).GeneratedBy.Increment()不需要序列就可以工作。我在Java中搜索了2天的解决方案。没有类似Java的答案。文档中没有任何信息。这个“技巧”对我帮助很大,对MS SQL Identity和Oracle sequence-TRIGGER非常有效。非常感谢。我很有帮助,如果你不介意,请投票支持答案:)