2010-04-26 66 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