2009-05-07 3 views

Antwort

14

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!

+3

Für Fluent NHibernate müssen Sie SetAttribute verwenden, die es so etwas wie machen: Karte (x => x.A) .SetAttribute ("index", "AB"); –

+1

Für alle, die sich fragen, unterstützt Fluent NHibernate nun '.Index (" IndexName ... ")', anstatt 'SetAttribute' zu ​​verwenden. – Phill

+0

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

14

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. Ein unique-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".

Verwandte Themen