Wie man einen mehrspaltigen Index und/oder eine eindeutige Einschränkung mit NHibernate Mapping oder Fluent NHibernate erstellt.
Antworten
Zu viele Anzeigen?Einen Index/eindeutigen Beschränkungsnamen mehr als einer Eigenschaft zuweisen
<property name="A" index="AB" />
<property name="B" index="AB" />
Theoretisch würde es auch funktionieren, wenn man mehr als einen Index für dieselbe Entität hätte:
<property name="A" index="AB, ABC" />
<property name="B" index="AB, ABC" />
<property name="C" index="ABC" />
Aber es gibt einen Fehler. Ich habe auch einen Patch geschrieben. Wenn Sie daran interessiert sind, stimmen Sie bitte für den Bug oder fügen Sie einen Kommentar hinzu oder so.
Editar : Ich habe gerade überprüft, was mit die Wanze . Das Problem wurde in Version 2.1.0 behoben, so dass es jetzt perfekt funktionieren sollte. Vielen Dank an das großartige NHibernate-Entwicklerteam!
Alt, aber ich habe etwas hinzuzufügen, da ich auf das gleiche Problem gestoßen bin:
Stefan Steinegger richtig beantwortet für nicht -eindeutige mehrspaltige Indizes, ließ aber den Code für einzigartig mehrspaltige Indizes. Für diese können Sie verwenden:
<property name="A" unique-key="AB" />
<property name="B" unique-key="AB" />
Also im Wesentlichen dasselbe, nur mit einem anderen Attributnamen.
Interessant ist, dass NHibernate bei eindeutigen Indizes einen eigenen Namen für den Schlüssel generiert, während es bei nicht eindeutigen Indizes den Namen verwendet, den Sie ihm geben.
Der obige Code erzeugt zum Beispiel KEINEN eindeutigen Index mit dem Namen "AB", sondern eher etwas wie UQ__TableName__7944C87104A02EF4
.
Dies ist dokumentiert in Abschnitt 19.1.1 der NHibernate-Dokumentation:
Einige Tags akzeptieren eine
index
Attribut zur Angabe des Namens einer Index für diese Spalte. Aunique-key
Attribut kann verwendet werden, um die Spalten in einer einzigen Einheitsschlüssel-Beschränkung. Derzeit ist der angegebene Wert des unique-key Attributs ist no verwendet, um die Einschränkung zu benennen, nur zur Gruppierung der Spalten in der Mapping-Datei.
Jedoch das Folgende:
<property name="A" index="AB" />
<property name="B" index="AB" />
wird lediglich ein Index mit dem Namen "AB" erstellt.