C# NHibernate seqhilo如何生成ID?

C# NHibernate seqhilo如何生成ID?,c#,oracle,nhibernate,nhibernate-mapping,C#,Oracle,Nhibernate,Nhibernate Mapping,我的Oracle数据库有一个从100000000开始的序列(部分顺序)。我的NHibernate映射使用此序列使用seqhilo生成id <id name="_persistenceId" column="Id" type="long" access="field" unsaved-value="0" > <generator class="seqhilo" > <param name="sequence">part_seq<

我的Oracle数据库有一个从100000000开始的序列(部分顺序)。我的NHibernate映射使用此序列使用seqhilo生成id

  <id name="_persistenceId" column="Id" type="long" access="field" unsaved-value="0" >
     <generator class="seqhilo" >
        <param name="sequence">part_seq</param>
        <param name="max_lo">100</param>
     </generator>
  </id>

第(二)部分
100
我希望生成的ID像10000000000、1000000000001、1000000000002、…、1000000000000100、10000000000001、10000000000002、。。。基于和

相反,NHibernate正在生成类似101000000000、101000000001、101000000002、…、101000000100、101000000101、101000000102的ID,并使用额外的1。它是如何生成这些id的?我如何才能让它不向id添加额外的1?

查看源代码,该算法的实现在将其乘以序列以生成hi部分之前,向最大值添加1。然后将lo部分添加到此结果以创建最终id

对于问题中的示例,它将以以下方式生成ID:

//max_lo is set to 100 when the generator is initialized

if(lo > max_lo)
{
    lo = 1;
    sequence = GetNextSequenceNumber(...);  //Starts at 1 billion
    hi = sequence * (max_lo + 1);
}
returnVal = hi + lo++;

创建101000000001、101000000002、101000000003等等。

你为什么关心额外的1?我不一定关心1;它实际上在我的场景中帮助了我。更让我担心的是,它没有按照我的预期工作。我真的不喜欢用一些我不知道能从中得到什么的东西。