我的 Oracle 数据库有一个从 1,000,000,000 开始的序列 (PART_SEQ)。我的 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>
我希望生成 id,如 100000000000、100000000001、100000000002、...、100000000100、100000000101、100000000102、... 基于 this question和 this question .
相反,NHibernate 正在生成诸如 101000000000、101000000001、101000000002、...、101000000100、101000000101、101000000102 以及额外的 1 之类的 ID。它是如何生成这些 ID 的,我怎样才能让它不添加额外的 1 ?
最佳答案
查看源代码here ,算法的实现将 max_lo 值加 1,然后将其乘以序列以生成 hi 部分。然后将 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 等
关于c# - NHibernate seqhilo 如何生成 id?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6377968/