Я успешно использую NHibernate уже довольно давно и смог решить множество подводных камней с помощью приложения, которое я разработал с его помощью и которое запущено в производство.Однако недавнее препятствие действительно заставляет меня чесать голову.
Недавно мне пришлось расширить библиотеку классов, добавив в нее несколько новых классов, которые вложены как дети в некоторые уже существующие классы.Я просто скопировал ту же модель для составного отображения, которую я уже успешно использовал, но на этот раз она не работает.
Теперь, когда я использую следующее в родительском файле сопоставления:
<bag name="SeaInfoItems" table="EDIImport_SeaInfo" lazy="false" cascade="save-update">
<key column="EDI_FK_OWNERID"/>
<one-to-many class="FargoGate.AppLib.EdiImportSeaInfo, FargoGate.AppLib"/>
</bag>
Я могу выбрать для использования в дочернем классе:
<property name="EDI_FK_OWNERID" column="EDI_FK_OWNERID" />
... который дает мне печально известную ошибку «Неверный индекс n для этой SqlParameterCollection with Count = n».
ИЛИ Я пытаюсь использовать это решение, которое я нашел после некоторого поиска в Google:
<property name="EDI_FK_OWNERID" column="EDI_FK_OWNERID" insert="false" update="false" />
..., которое дает мне сообщение "Невозможно вставить значение NULL в столбец" EDI_FK_OWNERID "...не разрешать нули. "ошибка.
Так что в основном мне приходится выбирать между вредителями и холерой.
Чего я не понимаю, так это того, что он работает безупречно для уже существующих классов агрегатов, и я действительно не могу заметить разницу.Единственное, что этот внешний ключ (EDI_FK_OWNERID) может ссылаться на две разные родительские таблицы.Плохой дизайн базы данных, я знаю, но я не проектировал его, и моя задача - развиваться до него к лучшему или к худшему.Я не могу изменить дизайн базы данных.
Другое отличие состоит в том, что я полностью удалил ссылку на внешний ключ из уже существующих дочерних классов (как сопоставлений, так и членов класса).Я пытался подражать этому, конечно, но безрезультатно.
Также я обнаружил, что один из новых классов (который довольно мал) также работает отлично.Но я тоже не вижу, в чем здесь разница.Я в тупике!
У кого-нибудь есть подсказка?