2013-11-15 60 views
1

如何配置NHibernate的3.3.1(或其他版本),以允許Microsoft SQL 2008 R2生成主鍵的值(GUID被訂購)帶有數據類型uniqueidentifier和默認約束的表NEWSEQUENTIALID()?NHibernate和MS SQL函數NEWSEQUENTIALID()生成一個有序的GUID

我的測試顯示我可以將Id(PK)映射設置爲GeneratedBy.Guid.Native(),但是這會調用select newid()並且不會使用函數NEWSEQUENTIALID()。

我可以生成ID映射,GeneratedBy.GuidComb()有序GUID客戶端,但我擔心同樣的過程產生相同的GUID內的多個線程。

我的應用程序需要跨主動/主動數據中心的數據庫複製,我想使用MS SQL服務器(多個活動數據中心)生成的有序guid作爲主鍵。

我看到這篇文章,

Nhibernate Identity mapping when using "newsequentialid" in DB

,但似乎缺少與顯示NHibernate的如何設置使用的NHibernate的生成的GUID的答案點。

任何幫助將不勝感激。

回答

1

默認情況下,我認爲NHibernate的使用guid.comb戰略產生哪些應當責令的GUID。它們不如NEWSEQUENTIALID()生成時那樣明顯,但仍應該排序。

退房在這個下面的文章:

http://nhibernate.info/blog/2009/05/21/using-the-guid-comb-identifier-strategy.html

+0

我可以使用Guid.Comb策略,但真的想知道我是否可以採取MS SQL函數NEWSEQUENTIALID的優勢()。到目前爲止,我找不到這個問題的答案。 – codemech

+0

@codemech如果您無法找到nhibernate的本地函數,那麼您可能只需編寫自己的調用newsequentialid()的生成器類即可。 http://nhforge.org/wikis/howtonh/creating-a-custom-id-generator-for-nhibernate.aspx –

+0

我認爲你的想法是有道理的。謝謝。 – codemech