2009-02-22 34 views
2

我想知道如何'種子'使用城堡AR自動遞增主鍵值?例如,想讓Orders表主鍵從10000開始。這是否爲1.可能2.創建訂單號碼的一個很好的解決方案?Castle ActiveRecord播種主鍵值

也許有一種方法可以在DB上有連續的自動遞增字段,它不是pk,播種到10000?

+1

什麼是數據庫引擎? – 2009-02-22 16:37:05

回答

3

Castle ActiveRecord是建立在NHibernate之上的,AR的功能主要依賴於NHibernate的功能。 NHibernate包含幾個主鍵生成器:
1. 本地 - 這是默認生成器。如果你指定了這個,那麼NHibernate會自動選擇基於底層數據庫的生成器類型。例如,如果我會在上面的映射片段中使用本地而不是身份,那麼您仍將獲得相同的SQL,因爲NHibernate足夠聰明,可以理解底層數據庫SQL Server並且它支持標識列。 NHibernate使用Convert.ChangeType方法轉換返回的值。
2. 身份 - 這可以用提供與SQL Server中,MySQL中,Sybase等標識列被使用,
3. 序列 - 火鳥,DB2和PostgreSQL,甲骨文,SAP DB支持序列
4。 增量 - 此生成器不使用序列或標識等任何數據庫功能。 NHibernate會自動將1遞增到最後一個主鍵值。這個生成器在處理單個數據庫系統時很有用,但對基於羣集的環境沒有幫助。
5. hilo - Hi/Lo算法用於生成主鍵值。與其他發電機類型相比,這非常有效。在使用時,NHibernate創建一個名爲hibernate_unique_key的單獨表並創建一個名爲next_hi的列,然後NHibernate在INSERT發生時使用該表作爲參考。我們稍後會在這篇文章中詳細討論這個問題。
6. uuid.hex - 使用System.Guid及其ToString方法生成基於字符串的主鍵值。
7. guid - 可以在類屬性類型爲Guid時使用。
8. guid.comb - 這與guid類似,但使用不同的算法來生成主鍵值。請注意,uuid.hex,guid,guid.comb使用UNIQUEIDENTIFIER作爲SQL Server中的列數據類型。
9. 分配 - 最後但並非最不重要的是,此生成器假定主鍵值由用戶分配。

所以你可以看到沒有這樣的內置功能。因爲這樣你會
1.選擇最大訂單和手動設置
2.添加一些INSERT觸發器數據庫
在我看來,你應該使用第一種方法:爲了創建一個訂單號碼,您可以使用2種方式不依賴於數據庫。當你需要上下移動一個對象時,你可以重用這個功能。我通常使用這種方式。