2010-11-06 21 views
6

L'objectif ici est de faire en sorte que ma configuration complète de la base de données et la génération de schéma soient gérées par nhibernate.Comment spécifier un index multi-colonnes avec Fluent NHibernate

Existe-t-il un moyen de spécifier un index multi-colonne avec Fluent nhibernate?

Je comprends que vous pouvez spécifier un index sur une seule propriété/colonne

comme ceci:

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

comment puis-je spécifier plusieurs colonnes?

Si cela n'est pas possible, existe-t-il un moyen d'ajouter des instructions SQL brutes à une configuration qui sera exécutée après la création/la mise à jour du schéma?

Répondre

12

Dans XML mappings cela peut être réalisé en ajoutant l'index avec le même nom à toutes les propriétés qui doivent être dans l'indice:

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

Malheureusement, je n'ont pas de projet en utilisant actuellement Fluent NHibernate que je pourrait tester cela, mais je pense que cela fonctionne dans Fluent NHibernate de la même façon:

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

Si cela ne fonctionne pas, vous pouvez ajouter le SQL brut nécessaire pour créer l'index dans database-object dans la cartographie. NHibernate exécutera le SQL lorsque la base de données est créée à l'aide de SchemaExport. Je ne sais pas s'il existe une version Fluent pour mapper les objets de base de données mais vous pouvez mapper database-object en utilisant XML et ajouter le fichier de mappage à la configuration de Fluent NHibernate.

+1

Je l'ai testé et cela fonctionne: mapping.Map (x => x.Name). Index ("MyIndex"); mapping.Map (x => x.RunTimeInMinutes) .Index ("MyIndex"); – Lance

+1

VÉRIFIÉ. J'ai scripté l'index et obtenu: USE [NhibernateDB] GO /****** Objet: Index [IX_MonTable_ColumnA_And_ColumnB] ​​Date du script: 01/16/2012 17:26:57 ******/ CREATE INDEX NONCLUSTERED [IX_MyTable_ColumnA_And_ColumnB] ​​ON [dbo]. [MyTable] ( \t [ColumnA] ASC, \t [ColumnB] ​​ASC ) GO – granadaCoder

+0

cela est correct et bien, mais est-il un moyen facile de faire l'index unique? –