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