"具有Count = n的此SqlParameterCollection的索引n无效"或"外键不能为空"

Fed*_*man 28 mapping nhibernate foreign-key-relationship

我已经成功使用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> 
Run Code Online (Sandbox Code Playgroud)

我可以选择在儿童班中使用:

  <property name="EDI_FK_OWNERID" column="EDI_FK_OWNERID" /> 
Run Code Online (Sandbox Code Playgroud)

...这给了我臭名昭着的"这个SqlParameterCollection的无效索引n与Count = n"错误.

或者我尝试使用谷歌搜索后发现的这个解决方案:

   <property name="EDI_FK_OWNERID" column="EDI_FK_OWNERID" insert="false" update="false" /> 
Run Code Online (Sandbox Code Playgroud)

...它给了我一个"无法将值NULL插入列'EDI_FK_OWNERID'...列不允许空值." 错误.

所以基本上我必须在害虫和霍乱之间做出选择.

我没有得到的是它对已经存在的聚合类完美无缺,我真的无法发现差异.唯一的问题是这个外键(EDI_FK_OWNERID)可以引用两个不同的父表.我知道,糟糕的数据库设计,但我没有设计它,我的任务是开发它,无论好坏.我无法改变数据库设计.

另一个区别是我完全从已经存在的子类(映射以及类成员)中删除了外键引用.当然,我试图效仿,但无济于事.

我还发现其中一个新类(非常小)也可以正常工作.但我也看不出这里有什么区别.我很难过!

有人有线索吗?

Fed*_*man 60

Aaargh!这个臭名昭着的"这个SqlParameterCollection的无效索引n与Count = n"错误让我错了很多,我忽略了一个明显的错误:一个类的一个字段的重复映射.在该特定映射中,我留下了此错误,其中主键也被定义为属性:

 <id name="ID" column="ID">
   <generator class="guid" />
 </id>
 <property name="ID" column="ID" /> 
Run Code Online (Sandbox Code Playgroud)

现在这是浪费时间试图调试它!