Ich habe eine bidirektionale Many-to-many-Assoziation zwischen EntityA und EntityB, und ich verwende eine Assoziationsklasse, EntityABLink, um dies zu modellieren, weil es andere Attribute über die Beziehung gibt, die ich verfolgen muss. Darüber hinaus habe ich eine weitere Klasse, die einen Verweis auf eine bestimmte Beziehung zwischen EntityA und EntityB enthält, so dass ich die Assoziationsklasse als vollwertige Entität behandle.
In EntityA habe ich eine schreibgeschützte Eigenschaft, die eine Liste der zugehörigen EntityB-Objekte zurückgibt, und ebenso habe ich in EntityB eine schreibgeschützte Eigenschaft, die eine Liste der zugehörigen EntityA-Objekte zurückgibt. Beachten Sie, dass ich für diese Eigenschaften die Tatsache ausblende, dass die Assoziation über eine Assoziationsklasse implementiert ist. (Ich habe auch eigene Methoden zur Aktualisierung der Beziehungen, die die Implementierung verbergen). Hinter den Kulissen von EntityA und EntityB habe ich private Sammlungen des Typs EntityABLink.
Da ein Bild mehr sagt als tausend Worte, hier ist, was ich bis jetzt beschrieben habe:
(Beachten Sie nochmals, dass die öffentlichen, schreibgeschützten Eigenschaften von EntityA und EntityB nicht vom selben Typ sind wie die privaten Mitglieder, die sie unterstützen).
So weit, so gut. Jetzt möchte ich diese Objekte mit Hilfe von Fluent NHibernate Automapping Overrides in einer Datenbank persistieren. Wenn es um das Mapping geht, denke ich gerne an die obige, funktional äquivalente Darstellung:
Aus diesem Diagramm geht hervor, dass das, was ich wirklich sind zwei bidirektionale Eins-zu-Viel-Beziehungen erforderlich.
Bei der Zuordnung der oben genannten Daten denke ich, dass ich so etwas brauche:
In der Automapping-Überschreibung von EntityA:
mapping.HasMany<EntityABLink>(Reveal.Member<EntityA>(“_AssociationList”)).Inverse().AsBag().Cascade.SaveUpdate();
mapping.IgnoreProperty(x => x.EntityBList);
In der Automapping-Überschreibung von EntityB:
mapping.HasMany<EntityABLink>(Reveal.Member<EntityB>(“_AssociationList”)).Inverse().AsBag().Cascade.SaveUpdate();
mapping.IgnoreProperty(x => x.EntityAList);
Im EntityABLink automapping override:
mapping.References<EntityA>(x => x.EntityA).Not.Nullable();
mapping.References<EntityB>(x => x.EntityB).Not.Nullable();
Wenn ich dies jedoch versuche, erhalte ich die folgende Fehlermeldung:
"Es konnte kein Getter für die Eigenschaft '_ AssociationList' in der Klasse 'EntityB' gefunden werden."
Irgendetwas muss mit meinen Zuordnungen falsch sein, aber ich bin mir nicht sicher, was. Irgendwelche Ideen?