"Недопустимый индекс 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) может относиться к двум
разные родительские таблицы. Плохой дизайн базы данных, я знаю, но я не
спроектируйте его, и моя задача - развить его к лучшему или худшему. Я не могу изменить дизайн базы данных.
Другое отличие заключается в том, что я полностью удалил ссылку на внешний ключ из уже существующих дочерних классов (сопоставлений, а также членов класса). Я пытался подражать этому, конечно, но безрезультатно.
Также я обнаружил, что один из новых классов (который довольно мал) также отлично работает. Но я не вижу, в чем разница. Я в тупике!
У кого есть ключ?
Ответы
Ответ 1
Aaargh! Я был так сильно на неправильной ноге с этим печально известным "Недопустимым индексом n для этой ошибки SqlParameterCollection с Count = n", что я пропустил очевидное: дублирующее отображение поля для ОДНОГО из классов.
В этом конкретном отображении я оставил эту ошибку, где первичный ключ также определяется как свойство:
<id name="ID" column="ID">
<generator class="guid" />
</id>
<property name="ID" column="ID" />
Теперь это была пустая трата времени, чтобы отладить это!