«Недействительный индекс n для этого SqlParameterCollection с Count = n» ИЛИ «внешний ключ не может быть нулевым»

Я уже довольно давно успешно использую 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) может относиться к двум разные родительские таблицы. Плохой дизайн базы данных, я знаю, но не сделал спроектировать его, и моя задача - развить его к лучшему или худшему. Я не могу изменить дизайн базы данных.

Другое отличие состоит в том, что я полностью удалил ссылку на внешний ключ из уже существующих дочерних классов (сопоставлений, а также членов класса). Я, конечно, пытался подражать этому, но безуспешно.

Также я обнаружил, что один из новых классов (который довольно мал) также работает нормально. Но я тоже не вижу, в чем разница. Я в тупике!

Кто-нибудь знает?

28
задан Fedor Steeman 3 February 2011 в 15:30
поделиться