2010-04-26 48 views
0

什么是实现人类可读数字的最佳方式,nhibernate中人类可读id的最佳策略

当前将Identity设置为代理键。

一直在考虑身份种子,但这会导致差距。

如果我要在事务范围内生成,那么并发会产生效果吗?

宁愿避免DBCC CHECKIDENT触发器。

谢谢。

回答

2

如果你有

  • 的顺序ID硬要求
  • 已经代理键不符合要求,不希望使用序列或身份证

那么你需要自己实施。

我很可能会写一个id-Generator来创建独特的顺序id。这必须使用自己的会话来将最新的ID存储在数据库中。如果你只有一个进程,那么你可以在内存中创建它们。

+0

好吧,我倾向于这种方法,是否有建议它自己的会话的特殊原因? – kalki 2010-04-27 14:34:36

+1

@kalki:肯定有一个原因。许多会话可以同时访问这个id-Generator。它必须独立于这些会话更新(并提交)数据库。它需要自己的隔离。 – 2010-04-27 15:14:31

1

基本上,存在用于NHibernate的两条最优id生成策略:guid.combhilo/seqhilo(后者是适用于支持序列RDBMS)

hilo生成积分的ID其比的GUID的可读性,所以这将是您的在这种情况下的选择。

不要担心差距;他们并不重要。

+0

代理钥匙通过guid.comb生成, 问题是人类可读的ID,即对于客户参考(采购订单号),间隔会导致不连续的订单号,从客户角度来看这通常不是好主意。 将会看到hilo – kalki 2010-04-27 07:44:22

+0

那么,这是新的信息(对*顺序* id的要求)。在这种情况下,您最好使用** trigger-identity **并使用触发器生成值。 – 2010-04-27 10:49:57