Подтвердить что ты не робот

"Недопустимый индекс n для этого SqlParameterCollection с графом = 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" /> 

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

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

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

У кого есть ключ?

4b9b3361

Ответ 1

Aaargh! Я был так сильно на неправильной ноге с этим печально известным "Недопустимым индексом n для этой ошибки SqlParameterCollection с Count = n", что я пропустил очевидное: дублирующее отображение поля для ОДНОГО из классов. В этом конкретном отображении я оставил эту ошибку, где первичный ключ также определяется как свойство:

 <id name="ID" column="ID">
   <generator class="guid" />
 </id>
 <property name="ID" column="ID" /> 

Теперь это была пустая трата времени, чтобы отладить это!