Nhibernate &引用;此计数为n的SqlParameterCollection的索引n无效;或;外键不能为空";

Nhibernate &引用;此计数为n的SqlParameterCollection的索引n无效;或;外键不能为空";,nhibernate,mapping,foreign-key-relationship,Nhibernate,Mapping,Foreign Key Relationship,我已经成功地使用NHibernate很长一段时间了 我已经能够用我开发的应用程序解决很多陷阱 用它开发的,正在生产中运行的。最近的障碍 不过,这真的让我抓狂 最近我不得不用一些新的类来扩展类库 作为子类嵌套到某些已存在的类中。我刚抄了 与我已经成功创建的聚合映射模型相同 使用,但这次不起作用 现在,当我在父映射文件中使用以下内容时: <bag name="SeaInfoItems" table="EDIImport_SeaInfo" lazy="false" cascade="save

我已经成功地使用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的计数为“n”错误

或者我尝试一下谷歌搜索后发现的解决方案:

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

…这给了我一个“无法在列中插入空值” “EDI\U FK\U OWNERID”…列不允许为空。“错误

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

我不明白的是,对于已经存在的系统,它可以完美地工作 聚合类,我真的看不出区别。唯一的 问题是这个外键(EDI_FK_OWNERID)可以引用两个 不同的父表。糟糕的数据库设计,我知道,但我没有 设计它,我的任务就是向它发展,无论是好是坏。我无法更改数据库设计

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

我还发现其中一个新类(相当小)也可以正常工作。但我也看不出这里有什么区别。我被难住了


有人有线索吗

啊!这个臭名昭著的“Count=n的SqlParameterCollection的索引n无效”错误让我陷入了错误的境地,以至于我忽略了一个明显的错误:其中一个类的字段的重复映射。 在该特定映射中,我留下了此错误,其中主键也定义为属性:

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


现在试着调试它是浪费时间

实际上无效的索引n。。。异常会直接导致您指向+1,因为它指出它可能是其中一个类中的副本。。。我已经为父类解决了这个问题。。。完全忘了儿童课!同意,这有助于知道要寻找什么。谢谢分享。很多以后,但是谢谢。我也在处理遗留数据库,现在我在处理一个有45列的表,我不知道出了什么问题。。。和宾果,两个属性被映射到同一列,因为一个复制错误。谢谢谢谢你澄清了一条毫无帮助的错误信息。谢谢你,伙计。这节省了我很多时间。在我的例子中,它是以下重复映射:
Property(x=>x.PositionID,map=>map.NotNullable(true))
manytone(x=>x.OffertePosition,map=>{map.Column(“PositionID”);map.Cascade(Cascade.None);})