Ich versuche, durch dieses Problem zu umgehen, wo die Unterklasse eine Reihe von Eigenschaften enthält jedoch zwei der Eigenschaften existieren nicht in der referenzierten Tabelle.NHiberate Beigetreten Subclass ungültiger Eigenschafts
Diese beiden Eigenschaften bestehen in einer Erweiterungstabelle, die FKs zurück zur Basistabelle hat. Ich bin mir nicht sicher, wie ich diesen XML-Code modifizieren kann, um die erste verbundene Unterklasse zu unterstützen und einen weiteren Join für die Extension-Tabelle hinzuzufügen.
ich eine andere Joined-Unterklasse für die Erweiterung Tabelle fügen Sie einfach versucht, aber da der Klassenname das gleiche war, war die Zuordnung ungültig.
<joined-subclass name="SESProgramAssociationAggregate.SESProgramAssociation" table="SESProgramAssociation" lazy="false">
<key>
<column name="BeginDate" />
<column name="EOId" />
<column name="PEOrganizationId" />
<column name="ProgramName" />
<column name="ProgramTypeId" />
<column name="UDI" />
</key>
<!-- PK properties -->
<property name="UDI" column="UDI" type="int" not-null="true" insert="false" />
<property name="ProgramTypeId" column="ProgramTypeId" type="int" not-null="true" insert="false" />
<property name="PEOrganizationId" column="PEOrganizationId" type="int" not-null="true" insert="false" />
<property name="BeginDate" column="BeginDate" type="date" not-null="true" insert="false" />
<property name="ProgramName" column="ProgramName" type="string" length="60" not-null="true" insert="false" />
<property name="EOId" column="EOId" type="int" not-null="true" insert="false" />
<!-- Properties -->
<property name="Eligibility" column="Eligibility" type="bool" />
<property name="SESDescriptorId" column="SESDescriptorId" type="int" not-null="true" />
<property name="SEHoursPerWeek" column="SEHoursPerWeek" type="decimal" />
<property name="HoursPerWeek" column="HoursPerWeek" type="decimal" />
<property name="MultiplyD" column="MultiplyD" type="bool" />
<property name="MFragile" column="MFragile" type="bool" />
<property name="LastEvalDate" column="LastEvalDate" type="date" />
<property name="ReviewDate" column="ReviewDate" type="date" />
<property name="BeginDate" column="BeginDate" type="date" />
<property name="EndDate" column="EndDate" type="date" />
<property name="EventCode" column="EventCode" type="int" />
<property name="WrittenConsentDate" column="WrittenConsentDate" type="date" />
</joined-subclass>
Die letzte Abfrage, die erzeugt wird, schlägt fehl, da es den Eventcode und WrittenConsentDate aus der SESProgramAssociation Tabelle zu verweisen versucht, wo sie nicht existieren. Sie existieren tatsächlich in der Erweiterungstabelle.
Ich bin mir nicht sicher, wie dieses XML so geändert werden kann, dass diese Felder auf die Extension-Tabelle verweisen, sodass die generierte Abfrage sie tatsächlich aus dieser Tabelle statt aus der falschen abruft. Jede Hilfe wird sehr geschätzt, dies ist meine erste Erfahrung mit NHiberate und unnötig zu sagen, es war nicht lustig!
Nach Beratung von Frédéric, ich aktualisiert, aber habe diesen Fehler:
Eine Ausnahme vom Typ ‚NHibernate.MappingException‘ in NHibernate.dll aufgetreten, wurde aber in Benutzercode
Zusätzliche Informationen nicht behandelt: EDFI. Ods.Entities.NHibernate.Mappings.SqlServer.StudentProgramAssociationBase.hbm.xml (79,8): XML-Validierungsfehler: Das Element 'joined-subclass' im Namespace 'urn: nhibernate-mapping-2.2' hat ein ungültiges untergeordnetes Element 'join' im Namensraum 'urn: nhibernate-mapping-2.2'. Liste der möglichen Elemente erwartet: 'Eigenschaft, Viele-zu-eins, eins-zu-eins, Komponente, dynamische Komponente, Eigenschaften, beliebig, Karte, Satz, Liste, Tasche, IDBAG, Array, primitive-Array, verbundene-Unterklasse , Lader, sQL-Insert, sQL-Update, sQL-löschen, resultset, Abfrage, sQL-Abfrage‘im Namensraum 'urn: nhibernate-Mapping-2.2'.
Vielen Dank für die Eingabe. Das Schlimme hier ist, dass ich glaube, ich habe vergessen zu erwähnen, dass diese beiden Felder in der Klasse existieren, die in der Joined-Klasse - SESProgramAssociation - benannt ist. Das Problem liegt an verschiedenen Standards für die Implementierung. Ich kann die SESProgramAssociation-Klasse nicht ändern, um beispielsweise diese Felder zu entfernen und eine eigenständige Klasse für diese Entität zu generieren. Ich muss irgendwie die SESProgramAssociation wiederverwenden, aber nur diese beiden Felder und beziehen sich auf die Erweiterungstabelle .... hoffentlich macht das Sinn. –
Dann meinen dritten Satz ist der Weg für Sie gehen, verwenden Sie die '' Mapping in '' für die Zuordnung Sie zwei andere Eigenschaften. –
Gab das einen Versuch aber Fehler, aktualisiert das OP. Link zur vollständigen Mapping-Datei, die beim Debuggen helfen kann: http://pastebin.com/ybSKHDsG –