我已成功使用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)可以引用两个 不同的父表。我知道,数据库设计不好,但我没有 设计它,我的任务是开发它,无论好坏。我无法改变数据库设计。
另一个区别是我完全从已经存在的子类(映射以及类成员)中删除了外键引用。当然,我试图效仿,但无济于事。
我还发现其中一个新类(非常小)也可以正常工作。但我也看不出这里有什么区别。我很难过!
任何人都有线索?
答案 0 :(得分:60)
Aaargh!这个臭名昭着的“这个SqlParameterCollection的无效索引n与Count = n”错误让我错了很多,我忽略了一个明显的错误:一个类的一个字段的重复映射。 在该特定映射中,我留下了这个错误,其中主键也被定义为属性:
<id name="ID" column="ID">
<generator class="guid" />
</id>
<property name="ID" column="ID" />
现在浪费时间试图调试它!