CompositeId Ursachen Der Mapping-Dokumentfehler konnte nicht kompiliert werden

7

Ich versuche, CompositeId zu einem Legacy-System zuzuordnen. Die Quellendatenbank hat einen zusammengesetzten Primärschlüssel, daher kann ich das normale this.Id-Mapping nicht verwenden.

Hier ist mein Versuch, es zuzuordnen:

%Vor%

Wenn ich versuche, die Sitzungsfabrik zu erstellen, verursacht diese Zuordnung den Fehler:     Das Mapping-Dokument konnte nicht kompiliert werden: (XmlDocument)

Ich habe versucht, das CompositeId-Mapping zu entfernen und ersetzte es mit:

%Vor%

Der Fehler verschwindet mit diesem Mapping, aber ich kann das nicht wirklich verwenden, da die AssemblyPartNumber nicht eindeutig ist.

Gibt es eine andere Möglichkeit, eine Tabelle mit einem zusammengesetzten Primärschlüssel zuzuordnen?

Danke,

Matthew MacFarland

    
Matthew MacFarland 27.10.2011, 12:31
quelle

1 Antwort

25

Was ist die innere Ausnahme für "Das Mapping-Dokument konnte nicht kompiliert werden: (XmlDocument)"? Meine Theorie ist, es wird "Composite-ID-Klasse muss Equals überschreiben (): YOURNAMESPACE.PriorityListPart".

Bei Objekten, die zusammengesetzte IDs benötigen, wird das Objekt selbst als Schlüssel verwendet. Damit Objekte, die identisch sind, als solche erkannt werden, müssen Sie die Methoden Equals und GetHashCode überschreiben.

Ein Beispiel Equals-Methode für Ihre Entität wäre etwa so:

%Vor%

Eine Beispiel-GetHashCode-Methode für Ihre Entität wäre etwa so:

%Vor%

Dies bedeutet auch, dass Sie, wenn Sie ein Objekt abrufen möchten, keinen einzigen Schlüssel dafür haben können. Um ein bestimmtes Objekt mit seinen zusammengesetzten Schlüsselkomponenten ordnungsgemäß abzurufen, ist der Schlüssel, den Sie verwenden, tatsächlich eine Instanz des Objekts mit den zusammengesetzten Schlüsselkomponenten, die auf die Entität eingestellt sind, die Sie abrufen möchten.

Dies ist der Grund, warum die Equals () -Methode überschrieben werden muss, damit NHibernate basierend auf dem, was Sie in der Equals-Methode angeben, bestimmen kann, welches Objekt Sie tatsächlich abrufen möchten.

    
docmanhattan 27.10.2011, 16:14
quelle