Я пытаюсь решить эту проблему, когда подкласс содержит набор свойств, однако два свойства не существуют в ссылочной таблице.NHiberate Подключенный подкласс Недопустимое свойство
Эти два свойства существуют в таблице расширения, которая имеет FKs обратно в базовую таблицу. Я не знаю, как изменить этот xml для поддержки первого объединенного подкласса и добавления другого соединения для таблицы Extension.
Я попытался просто добавить еще один объединенный подкласс для таблицы Extension, однако, поскольку имя класса было одинаковым, отображение было недействительным.
<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>
Окончательный запрос, который генерируется сбой, поскольку он пытается ссылаться на EventCode и WrittenConsentDate из таблицы SESProgramAssociation, где они не существуют. Они действительно существуют в таблице Extension.
Я не уверен, как изменить этот xml, чтобы указать эти поля в таблицу расширений , поэтому сгенерированный запрос фактически вытаскивает их из этой таблицы вместо неправильной. Любая помощь очень ценится, это мой первый опыт работы с NHiberate, и, разумеется, это не весело!
После консультации с Фредерика, я обновил, но получил эту ошибку:
Исключения типа «NHibernate.MappingException» произошло в NHibernate.dll, но не был обработан в пользовательском коде
Дополнительной информации: EdFi. Ods.Entities.NHibernate.Mappings.SqlServer.StudentProgramAssociationBase.hbm.xml (79,8): Ошибка проверки XML: элемент 'join-subclass' в пространстве имен 'urn: nhibernate-mapping-2.2' имеет недопустимый дочерний элемент 'join' в пространстве имен 'urn: nhibernate-mapping-2.2'. Список ожидаемых элементов: свойство, много-к-одному, один-к-одному, компонент, динамический компонент, свойства, любой, карта, набор, список, сумка, суммарная сумка, массив, примитивный массив, объединенный подкласс , загрузчик, sql-insert, sql-update, sql-delete, resultset, query, sql-query 'в пространстве имен' urn: nhibernate-mapping-2.2 '.
Большое спасибо за ввод. Плохо то, что я считаю, что забыл упомянуть, что эти два поля существуют в классе, который указан в объединенном классе - SESProgramAssociation. Проблема связана с различными стандартами для реализации, я не могу изменить класс SESProgramAssociation, чтобы, скажем, удалить эти поля и создать отдельный класс для этого объекта. Мне нужно как-то повторно использовать SESProgramAssociation, но только эти два поля и относить это к таблице расширений .... надеюсь, это имеет смысл. –
Тогда мое третье предложение - это путь для вас, используйте '' отображение внутри '' для сопоставления двух других свойств. –
Дал попытку, но получил ошибку, обновил OP. Ссылка на полный файл сопоставления, который может помочь при отладке: http://pastebin.com/ybSKHDsG –