2010-11-06 61 views
6

這裏的目標是我的完整數據庫配置和模式生成由流利的nhibernate處理。如何用Fluent NHibernate指定多列索引

有沒有辦法使用Fluent nhibernate指定多列索引?

我明白,你可以在一個單一的財產/列

像這樣指定索引:

mapping.Map(x => x.ItemDt).Index("IX_DataTransferLog_ItemDt"); 

我怎麼可以指定多個列?

如果這是不可能的,是否有方法將原始SQL語句添加到將在模式創建/更新後運行的配置中?

回答

12

在XML的映射,這可以通過添加具有相同名稱指數需要在索引的所有屬性來實現:

<property name="Name" index="MyIndex" /> 
<property name="RunTimeInMinutes" index="MyIndex" /> 

不幸的是,我沒有任何項目目前使用功能NHibernate我可以測試這個,但我想這樣的作品在功能NHibernate以同樣的方式:

mapping.Map(x => x.Name).Index("MyIndex"); 
mapping.Map(x => x.RunTimeInMinutes).Index("MyIndex"); 

如果這不起作用,你可以添加database-object在映射上創建索引所需的原始SQL。當使用SchemaExport創建數據庫時,NHibernate將執行SQL。我不知道是否有映射數據庫對象的Fluent版本,但您可以使用XML映射database-object,並將映射文件添加到Fluent NHibernate的配置中。

+1

我測試過了,它的工作原理如下: mapping.Map(x => x.Name).Index(「MyIndex」); mapping.Map(x => x.RunTimeInMinutes).Index(「MyIndex」); – Lance 2010-11-08 17:16:15

+1

已通過驗證。我編寫了索引並得到:USE [NhibernateDB] GO /******對象:索引[IX_MyTable_ColumnA_And_ColumnB]腳本日期:01/16/2012 17:26:57 ******/ 創建非聚集索引[IX_MyTable_ColumnA_And_ColumnB] ON [DBO]。[MyTable的] ( \t [ColumnA] ASC, \t [ColumnB] ASC ) GO – granadaCoder 2012-01-16 22:29:27

+0

這是正確的,良好的,但在那裏賺了指數的簡單方法獨特? – 2013-09-23 02:35:33

相關問題