什么是实现人类可读数字的最佳方式,nhibernate中人类可读id的最佳策略
当前将Identity设置为代理键。
一直在考虑身份种子,但这会导致差距。
如果我要在事务范围内生成,那么并发会产生效果吗?
宁愿避免DBCC CHECKIDENT触发器。
谢谢。
什么是实现人类可读数字的最佳方式,nhibernate中人类可读id的最佳策略
当前将Identity设置为代理键。
一直在考虑身份种子,但这会导致差距。
如果我要在事务范围内生成,那么并发会产生效果吗?
宁愿避免DBCC CHECKIDENT触发器。
谢谢。
如果你有
那么你需要自己实施。
我很可能会写一个id-Generator来创建独特的顺序id。这必须使用自己的会话来将最新的ID存储在数据库中。如果你只有一个进程,那么你可以在内存中创建它们。
基本上,存在用于NHibernate的两条最优id生成策略:guid.comb
和hilo/seqhilo
(后者是适用于支持序列RDBMS)
hilo
生成积分的ID其比的GUID的可读性,所以这将是您的在这种情况下的选择。
不要担心差距;他们并不重要。
代理钥匙通过guid.comb生成, 问题是人类可读的ID,即对于客户参考(采购订单号),间隔会导致不连续的订单号,从客户角度来看这通常不是好主意。 将会看到hilo – kalki 2010-04-27 07:44:22
那么,这是新的信息(对*顺序* id的要求)。在这种情况下,您最好使用** trigger-identity **并使用触发器生成值。 – 2010-04-27 10:49:57
好吧,我倾向于这种方法,是否有建议它自己的会话的特殊原因? – kalki 2010-04-27 14:34:36
@kalki:肯定有一个原因。许多会话可以同时访问这个id-Generator。它必须独立于这些会话更新(并提交)数据库。它需要自己的隔离。 – 2010-04-27 15:14:31