Creo que hay un par de formas de hacer lo que intentas hacer.
El primero es especificar el nombre en el archivo de mapeo. Sé que funciona para claves externas, aunque no lo he intentado con claves únicas.
<property name="KeyId" column="KeyId" type="Int" unique="true" unique-key="MyKeyName"/>
Dentro de NHibernate puede cambiar la estrategia de asignación de nombres mediante la creación de una clase que implementa NHibernate.Cfg.INamingStrategy
y la adición de esa clase cuando se configura nhibernate.
ISessionFactory sf = new Configuration()
.SetNamingStrategy(new YourNamingStrategy())
.Configure()
.SchemaExport(true, false);
También es una estrategia mejorada que está incorporada en nhibernate. No puedo recordar lo que da salida fuera de la mano, pero vale la pena intentarlo
ISessionFactory sf = new Configuration()
.SetNamingStrategy(ImprovedNamingStrategy.Instance)
.Configure()
.SchemaExport(true, false);
EDITAR
Hay un par de otras posibilidades que he encontrado la primera de ellas consiste en la etiqueta de propiedad. hay una etiqueta de columna que tiene una serie de atributos que pueden ser de utilidad.
<property name=KeyID>
<column name="KeyId" unique-key="MyKeyName"/>
</property>
el otro es un poco más complicado Usted puede agregar algo como esto
<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 crear una clase que implementa NHibernate.Mapping.IAuxiliaryDatabaseObject
que creará las sentencias DDL.
Tenga una mirada en el NHiberate manual on nhibernate.info y baje hasta
5,6. Objetos auxiliares de la base de datos
Esto explica lo que debe hacer.
La primera forma no puede trabajar. Actualmente, el valor especificado de la clave única no se usa para nombrar la restricción, solo para agrupar las columnas en el archivo de asignación. Voy a probar el modo "NamingStrategy". – ldp615
Y la forma de "NamingStrategy" tampoco puede funcionar. NHibernate.Cfg.INamingStrategy solo se ocupa de los nombres de tabla y columna. – ldp615
Perdón por eso. Comprobaré si hay alguna otra forma de lograr lo que busca. –