2009-11-23 41 views
3

在Fluent NHibernate中有一種方法可以指定外鍵應該被編入索引嗎?如何使用Fluent NHibernate和SchemaUpdate.Execute()索引外鍵?

MS Sql Server的默認配置不索引外鍵。我希望由NHibernate模式生成/更新工具生成的模式來索引這些密鑰。當我只使用HasManyHasManyToMany方法時,不會創建這樣的索引。這甚至可以用原始XML映射嗎?

+0

如果您不知道,缺省情況下外鍵未被索引的原因是可能導致應用程序性能整體下降。這感覺就像沒有分析的嘗試優化。 – 2009-11-27 11:40:38

+1

邁克爾 - 我不想爲模式中的每個FK做這個 - 只在我知道我需要它的地方。我對MS Sql Server在默認情況下不會索引FK的事實毫不關心。但是,我確實需要一些方法來索引FKs。我寧願,至少在最初的時候,我可以用Fluent NHibernate來做到這一點。 – Krazzy 2009-11-27 16:56:07

回答

6

我認爲列映射元素上的'index'屬性就是你所追求的。如果你對FNH的最新版本,您可以設置此爲一到許多像這樣:

HasMany(x => x.Components) 
     .KeyColumns.Add("ProductId", c => c.Index("someIndex"); 

同樣的API還沒有可用於許多一對多的,但它是它的方式。

+0

很棒 - thx - 這就是我一直在尋找的東西。看起來像我的FNH版本(1.0 RTM)還沒有這個選項 - 這隻適用於必須從源代碼構建的版本嗎? – Krazzy 2009-11-24 14:18:12

+0

您不必從源代碼構建。下載頁面有最新版本。修訂595應該有這個改變。 http://fluentnhibernate.org/downloads – 2009-11-25 10:45:15

+0

好的 - 現在我看到了構建。猜猜我應該滾動了幾個像素,而不是點擊第一件說下載的東西:) – Krazzy 2009-11-25 14:25:50