我正在設計一個應用程序,其中我的Order
對象需要具有順序且用戶友好的Id
字段。我避開了HiLo
算法,因爲它產生的間隙相當大(見here)。自然,Guid
的價值觀會讓我的企業用戶去香蕉。我還避免因爲它的主要缺點甲骨文序列:如何在NHibernate中實現無縫,用戶友好的ID?
(來源:NHibernate POID Generators revealed)
後插入發電機,正如其名字 建議,分配的ID後 實體存儲在數據庫中。 A select語句是針對 數據庫執行的。他們有許多缺點, ,在我看來,他們只能在棕地項目上使用 。 那些 發電機是我們不建議 作爲NH團隊。
>有些缺點是繼 :
- 工作單元與使用 這些戰略打破。使用FlushMode.Commit的 並不重要,每個 將結果保存在針對數據庫的插入語句 中。作爲最佳做法,我們 應該延遲插入提交, ,但使用後插入生成器 使它保存(這是什麼 UoW不這樣做)。
- 抵消配料這些戰略,你不能拿 利用發送多個查詢 一次(因爲它必須在 保存的時間去數據庫)的。
實現用戶友好型ID的任何想法/經驗沒有大的差距?
編輯:
- 用戶友好
Id
領域是那些我的企業用戶能記住,甚至討論和/或有電話交談通過它的代碼,例如在談論一個特定Order
「我打電話要知道爲什麼1625號訂單被拒絕。」 Id
不需要嚴格無縫,但我擔心我的用戶會看到像100,201,305之類的空白時會感到困惑。對於我的舊項目,我目前使用Oracle序列實現NHibernate在拋出異常時偶爾會丟失一些序列,但是對它們保持相當整潔的順序。他們的缺點是他們如何破壞工作單元,這會導致每個Save
命令的額外命中數據庫有或沒有Session.Flush
。
你如何定義「用戶友好的ID」?就像連續的整數一樣? – R0MANARMY 2011-05-08 01:54:12
你能否進一步擴展oracle序列的這些「主要缺點」?正確使用時,我從來沒有遇到任何問題(適合您環境的緩存設置)。爲什麼你需要它無間隙,每當有人問這個問題時,我傾向於覺得他們通常走錯了路。 – 2011-05-08 02:35:58
@Matthew和@ R0MANARMY - 請參閱我的帖子更新。 :) – rebelliard 2011-05-08 02:52:45