2009-11-23 51 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