Cómo crear un índice de múltiples columnas y/o una restricción única usando NHibernate Mapping o NHibernate con Fluidez.Cómo crear un índice de múltiples columnas o una restricción única con NHibernate
Respuesta
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!
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 atributounique-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".
- 1. Agregue una restricción única en columnas múltiples con FluentNHibernate
- 2. Cómo crear una restricción ÚNICA compuesta en FluentNHibernate?
- 3. Griales clase de dominio: restricción única para múltiples columnas
- 4. ¿Cómo especifico un índice de varias columnas con Fluent NHibernate
- 5. Restricción única sobre varias columnas
- 6. Restricción única en varias columnas
- 7. Restricción única de Oracle e índice único
- 8. Combinación de dos columnas restricción única
- 9. Restricción única frente a índice único
- 10. Restricción única en múltiples campos en Access 2003
- 11. restricción única condicional
- 12. restricción CHECK en múltiples columnas
- 13. ¿Cómo puedo crear una restricción única de SQL basada en 2 columnas?
- 14. Cómo crear una restricción única compuesta en SQL Server 2005
- 15. MySQL: restricción única en campos múltiples
- 16. SQL Server 2005 ¿Cómo crear una restricción única?
- 17. Restricción única con anotación de datos
- 18. Restricción de la tabla de SQLite: única en varias columnas
- 19. ¿Índice único o clave única?
- 20. R- establecer una fecha única de múltiples columnas
- 21. Postgres Restricción única en dos columnas: Entero y booleano
- 22. ¿Cómo crear una tabla en Android con múltiples columnas?
- 23. tabla fija única con columnas múltiples versus tablas abstractas flexibles
- 24. ¿Hay una manera mejor de indexar columnas múltiples que crear un índice para cada permutación?
- 25. SQL Server 2005 Restricción única en dos columnas
- 26. ¿La creación de una restricción única en una columna crea automáticamente un índice?
- 27. SQL Server 2008: Las columnas de la tabla no coinciden con una clave principal existente o una restricción única
- 28. muchas-a-una con múltiples columnas
- 29. MySQL. Crear un índice para consultas "O"
- 30. Restricción ÚNICA, solo cuando un campo contiene un valor específico
Para Fluidez NHibernate debe usar SetAttribute, que lo haría algo así como: Mapa (x => x.A) .SetAttribute ("índice", "AB"); –
Para cualquiera que se lo esté preguntando, Fluent NHibernate ahora admite '.Index (" IndexName ... ")', en lugar de tener que usar 'SetAttribute'. – Phill
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