So erstellen Sie einen mehrspaltigen Index und/oder eine eindeutige Einschränkung mithilfe von NHibernate Mapping oder Fluent NHibernate.So erstellen Sie einen mehrspaltigen Index oder eine eindeutige Einschränkung mit NHibernate
Antwort
zuordnen Index/eindeutige Einschränkung Namen mehr als eine Eigenschaft
<property name="A" index="AB" />
<property name="B" index="AB" />
Theoretische es auch mit, die mehr als einen Index auf der gleichen Einheit funktionieren würde:
<property name="A" index="AB, ABC" />
<property name="B" index="AB, ABC" />
<property name="C" index="ABC" />
But there is a bug. Ich habe auch einen Patch geschrieben. Wenn Sie daran interessiert sind, stimmen Sie bitte für den Fehler oder fügen Sie einen Kommentar oder etwas hinzu.
Bearbeiten: nur überprüft, was mit the bug passiert ist. Es ist in Version 2.1.0 behoben, also sollte es jetzt perfekt funktionieren. Vielen Dank an das großartige Entwicklerteam von NHibernate!
Alt, aber ich habe etwas hinzufügen, da ich auf diese gleiche Frage kam:
Stefan Steinegger richtig beantwortete für nicht -einzigartige Indizes mit mehreren Spalten, aber für den Code links aus einzigartigen mehrspaltigen Indizes. Für diejenigen, die Sie verwenden können:
Also, im Wesentlichen gleich, aber mit einem anderen Attributnamen.
Eine interessante Sache ist zu beachten, dass für eindeutigen Indizes, NHibernate für den Schlüssel eigene Namen erzeugt, aber für nicht eindeutigen Indizes verwendet es, was auch immer Sie es geben.
Zum Beispiel erzeugt der obige Code NICHT einen eindeutigen Index namens "AB", sondern etwas wie UQ__TableName__7944C87104A02EF4
.
Dies ist in section 19.1.1 der NHibernate Dokumentation dokumentiert:
Einige Tags ein
index
Attribut für die Angabe des Namens eines Index für diese Spalte übernehmen. Einunique-key
Attribut kann verwendet werden, um Spalten in einer einzelnen Einheit Schlüssel Einschränkung zu gruppieren. Derzeit ist der angegebene Wert des Attributs unique-key nicht, um die Einschränkung zu verwenden, nur zum Gruppieren der Spalten in der Zuordnungsdatei.
jedoch folgendes:
<property name="A" index="AB" />
<property name="B" index="AB" />
wird nur einen Index erzeugen namens "AB".
- 1. Oracle: Einzel mehrspaltigen Index oder zwei Einzelspaltenindizes
- 2. Wie definiere ich einen mehrspaltigen Index mit Fluent NHibernate
- 3. Postgres eindeutige Einschränkung vs Index
- 4. Sie müssen keinen Index für eine Spalte mit einer UNIQUE-Einschränkung erstellen, oder?
- 5. Eindeutige Einschränkung mit Datenannotation
- 6. Erstellen eine eindeutige Einschränkung auf zwei Säulen zusammen in Ecto
- 7. Warum ignoriert Fluent NHibernate meine eindeutige Einschränkung für eine Komponente?
- 8. PostgreSQL: Bedingte eindeutige Einschränkung
- 9. So erstellen Sie eindeutige Keys in KeystoneJS
- 10. Eindeutige Einschränkung in MySQL
- 11. MongoDB: entfernen eindeutige Einschränkung
- 12. Umbau bestehender eindeutige Einschränkung
- 13. Problem Eindeutige Einschränkung
- 14. Eindeutige Einschränkung vs Vorprüfung
- 15. Wie MySql mehrspaltigen Index arbeitet
- 16. Eindeutige Einschränkung für Tabellenspalte
- 17. Fügen Sie eine eindeutige Einschränkung für mehrere Spalten mit FluentNHibernate hinzu
- 18. Ist es möglich, eine eindeutige Einschränkung (Index) für mehrere Tabellen zu erstellen?
- 19. So erstellen Sie eine UNIQUE Einschränkung für ein JSONB Feld mit Sequelize
- 20. Wie erzwinge ich eine eindeutige Einschränkung für eine HasManyToMany-NHibernate-Beziehung?
- 21. Sollte ich eine eindeutige Einschränkung mit PHP überprüfen?
- 22. Postgresql: Bedingte eindeutige Einschränkung
- 23. Eindeutige Einschränkung mit weichen gelöschten Zeilen ausgeschlossen
- 24. Eindeutige case-insensitive Einschränkung in Oracle-Datenbank
- 25. NHibernate - Name Primärschlüssel-Einschränkung?
- 26. EF6 eindeutige Einschränkung auf Fremdschlüssel
- 27. ORA-00001 eindeutige Einschränkung - mit gültigem Wert
- 28. Eindeutige Schlüsselreihenfolge in fließendem Nhibernate
- 29. eine eindeutige Einschränkung für eine Beziehung 2 Grad entfernt
- 30. Eindeutige Einschränkung über mehrere Spalten
Für Fluent NHibernate müssen Sie SetAttribute verwenden, die es so etwas wie machen: Karte (x => x.A) .SetAttribute ("index", "AB"); –
Für alle, die sich fragen, unterstützt Fluent NHibernate nun '.Index (" IndexName ... ")', anstatt 'SetAttribute' zu verwenden. – Phill
Es ist wichtig zu sagen, dass die Eigenschaft 'index' (und auch 'eindeutiger Schlüssel') von NHibernate nur verwendet wird, wenn eine CREATE TABLE-Anweisung generiert wird und NHibernate nicht daran gehindert wird, eine doppelte Zeile einzufügen, wenn eine Sitzung verwendet wird. Speichern usw. – mayu