2009-05-07 8 views

Respuesta

14

asignar un nombre de restricción índice/única de más de una propiedad

<property name="A" index="AB" /> 
<property name="B" index="AB" /> 

teórico sino que también funcionaría con tener más de un índice en la misma entidad:

<property name="A" index="AB, ABC" /> 
<property name="B" index="AB, ABC" /> 
<property name="C" index="ABC" /> 

But there is a bug. También escribí un parche. si le interesa esto, vote por el error o agregue un comentario o algo.

Editar: acaba de comprobar lo que pasó con the bug. Está arreglado en la versión 2.1.0, por lo que debería funcionar perfectamente ahora. ¡Muchas gracias al gran equipo de desarrolladores de NHibernate!

+3

Para Fluidez NHibernate debe usar SetAttribute, que lo haría algo así como: Mapa (x => x.A) .SetAttribute ("índice", "AB"); –

+1

Para cualquiera que se lo esté preguntando, Fluent NHibernate ahora admite '.Index (" IndexName ... ")', en lugar de tener que usar 'SetAttribute'. – Phill

+0

Es importante decir que NHibernate solo utiliza la propiedad 'indexar' (y 'clave única' también) cuando genera una instrucción CREATE TABLE y no impide que NHibernate intente insertar una fila duplicada cuando usa la sesión. Guardar etc. – mayu

14

viejo, pero tengo algo que añadir ya que me encontré con este mismo problema:

Stefan Steinegger contestadas correctamente para índices de varias columnas no -Único, pero dejó el código para varias columnas únicas índices Para aquellos que puede usar:

<property name="A" unique-key="AB" /> 
<property name="B" unique-key="AB" /> 

Por lo tanto, esencialmente el mismo pero con un nombre de atributo diferente.


Una cosa interesante a destacar es que para los índices únicos, NHibernate genera su propio nombre de la clave, pero para los índices no únicos se utiliza lo que le des.

Por ejemplo, el código anterior NO generará un índice único llamado "AB", sino algo así como UQ__TableName__7944C87104A02EF4.

Esto está documentado en section 19.1.1 de la documentación NHibernate:

Algunas etiquetas aceptar un atributo index para especificar el nombre de un índice para esa columna. Un atributo unique-key se puede usar para agrupar columnas en una restricción de clave de unidad única. Actualmente, el valor especificado del atributo de clave única es no utilizado para nombrar la restricción, solo para agrupar las columnas en el archivo de correlación.

Sin embargo la siguiente:

<property name="A" index="AB" /> 
<property name="B" index="AB" /> 

sólo va a generar un índice llamado "AB".

Cuestiones relacionadas