Je pense qu'il y a plusieurs façons de faire ce que vous essayez de faire.
La première consiste à spécifier le nom dans le fichier de mappage. Je sais que cela fonctionne pour les clés étrangères, même si je n'ai pas essayé avec des clés uniques.
<property name="KeyId" column="KeyId" type="Int" unique="true" unique-key="MyKeyName"/>
Dans NHibernate vous pouvez modifier la stratégie d'attribution de noms en créant une classe qui implémente NHibernate.Cfg.INamingStrategy
et en ajoutant cette classe lorsque vous configurez NHibernate.
ISessionFactory sf = new Configuration()
.SetNamingStrategy(new YourNamingStrategy())
.Configure()
.SchemaExport(true, false);
Le est également un ImprovedNamingStrategy qui est intégré à nhibernate. Ne me souviens pas ce qu'il génère de la main, mais la peine d'essayer
ISessionFactory sf = new Configuration()
.SetNamingStrategy(ImprovedNamingStrategy.Instance)
.Configure()
.SchemaExport(true, false);
EDIT
Il y a deux autres possibilités que j'ai trouvé la première implique la balise de propriété. il y a une balise de colonne qui a un certain nombre d'attributs qui peuvent être utiles.
<property name=KeyID>
<column name="KeyId" unique-key="MyKeyName"/>
</property>
l'autre est un peu plus impliqué Vous pouvez ajouter quelque chose comme ça
<database-object >
<create>
create table MyTable(
Id UNIQUEIDENTIFIER not null,
Name NVARCHAR(10) not null,
RowVersion INT not null,
primary key (Id)
)
ALTER TABLE dbo.MyTable ADD
CONSTRAINT IX_Table_1 UNIQUE NONCLUSTERED(Name)
WITH(STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
</create>
<drop></drop>
</database-object>
Ou créer une classe qui implémente NHibernate.Mapping.IAuxiliaryDatabaseObject
qui va créer les instructions DDL.
Jetez un oeil dans la NHiberate manual on nhibernate.info et faites défiler jusqu'à
5,6. Objets de base de données auxiliaires
Ceci explique ce que vous devez faire.
La première ne peut pas fonctionner. Actuellement, la valeur spécifiée de la clé unique n'est pas utilisée pour nommer la contrainte, uniquement pour regrouper les colonnes dans le fichier de mappage. Je vais essayer "NamingStrategy" manière. – ldp615
Et la méthode "NamingStrategy" ne peut pas non plus fonctionner. NHibernate.Cfg.INamingStrategy se soucie uniquement des noms de tables et des noms de colonnes. – ldp615
Désolé pour ça. Je vais vérifier s'il existe un autre moyen d'accomplir ce que vous recherchez. –