Penso che ci siano un paio di modi per fare ciò che stai cercando di fare.
Il primo è specificare il nome nel file di mapping. So che funziona per le chiavi esterne, anche se non ho provato con le chiavi univoche.
<property name="KeyId" column="KeyId" type="Int" unique="true" unique-key="MyKeyName"/>
All'interno NHibernate è possibile modificare la strategia di denominazione con la creazione di una classe che implementa NHibernate.Cfg.INamingStrategy
e l'aggiunta di quella classe quando si configura NHibernate.
ISessionFactory sf = new Configuration()
.SetNamingStrategy(new YourNamingStrategy())
.Configure()
.SchemaExport(true, false);
È anche una categoria di programmazione migliorata incorporata per la protezione. Non ricordo che cosa uscite fuori mano, ma vale la pena provare
ISessionFactory sf = new Configuration()
.SetNamingStrategy(ImprovedNamingStrategy.Instance)
.Configure()
.SchemaExport(true, false);
EDIT
Ci sono un paio di altre possibilità che ho trovato il primo riguarda il tag di proprietà. c'è un tag colonna che ha un numero di attributi che possono essere utili.
<property name=KeyID>
<column name="KeyId" unique-key="MyKeyName"/>
</property>
l'altro è un po 'più coinvolti è possibile aggiungere qualcosa di simile
<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>
O creare una classe che implementi NHibernate.Mapping.IAuxiliaryDatabaseObject
che creerà le istruzioni DDL.
Date un'occhiata nel NHiberate manual on nhibernate.info e scorrere verso il basso per
5,6. Oggetti di database ausiliari
Questo spiega cosa è necessario fare.
Il primo modo non può funzionare. Attualmente, il valore specificato della chiave univoca non viene utilizzato per assegnare un nome al vincolo, ma solo per raggruppare le colonne nel file di mapping. Proverò la modalità "NamingStrategy". – ldp615
Anche la modalità "NamingStrategy" non può funzionare. NHibernate.Cfg.INamingStrategy si occupa solo dei nomi delle tabelle e dei nomi delle colonne. – ldp615
Mi dispiace per quello. Controllerò per vedere se c'è un altro modo per ottenere ciò che stai cercando. –