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

时间:2011-02-03 15:30:10

标签: nhibernate mapping 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> 

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

  <property name="EDI_FK_OWNERID" column="EDI_FK_OWNERID" /> 

...这给了我臭名昭着的“无效索引n SqlParameterCollection,Count = n“错误。

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

   <property name="EDI_FK_OWNERID" column="EDI_FK_OWNERID" insert="false" update="false" /> 

...这给了我一个“无法将值NULL插入列中 'EDI_FK_OWNERID'...列不允许空值。“错误。

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

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

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

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

任何人都有线索?

1 个答案:

答案 0 :(得分:60)

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

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

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