C# NHibernate seqhilo如何生成ID?
我的Oracle数据库有一个从100000000开始的序列(部分顺序)。我的NHibernate映射使用此序列使用seqhilo生成idC# 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<
<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;它实际上在我的场景中帮助了我。更让我担心的是,它没有按照我的预期工作。我真的不喜欢用一些我不知道能从中得到什么的东西。