Я успешно использовал 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" />
..., который дает мне печально известный "Invalid Index n для этого SqlParameterCollection с ошибкой Count = n ".
ИЛИ Я пытаюсь использовать это решение, которое я нашел после некоторого Googling:
<property name="EDI_FK_OWNERID" column="EDI_FK_OWNERID" insert="false" update="false" />
..., который дает мне "Невозможно вставить значение NULL в столбец 'EDI_FK_OWNERID'... столбец не допускает ошибки. ".
Так что в основном я должен выбирать между вредителями и холерой.
Я не понимаю, что он работает безупречно для уже существующих совокупные классы, и я действительно не могу разглядеть разницу. Единственный Дело в том, что этот внешний ключ (EDI_FK_OWNERID) может относиться к двум разные родительские таблицы. Плохой дизайн базы данных, я знаю, но я не спроектируйте его, и моя задача - развить его к лучшему или худшему. Я не могу изменить дизайн базы данных.
Другое отличие заключается в том, что я полностью удалил ссылку на внешний ключ из уже существующих дочерних классов (сопоставлений, а также членов класса). Я пытался подражать этому, конечно, но безрезультатно.
Также я обнаружил, что один из новых классов (который довольно мал) также отлично работает. Но я не вижу, в чем разница. Я в тупике!
У кого есть ключ?