【问题标题】:"Invalid Index n for this SqlParameterCollection with Count=n" OR "foreign key cannot be null"“此 SqlParameterCollection 的索引 n 无效,Count=n”或“外键不能为空”
【发布时间】:2011-06-20 18:14:22
【问题描述】:

我已经成功使用 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 with Count=n" 错误。

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

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

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

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

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

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

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

有人知道吗?

【问题讨论】:

标签: nhibernate mapping foreign-key-relationship


【解决方案1】:

啊啊啊!我被这个臭名昭著的“Invalid Index n for this SqlParameterCollection with Count=n”错误弄得一头雾水,以至于我忽略了一个明显的问题:一个类的字段的重复映射。 在那个特定的映射中,我留下了这个错误,主键也被定义为一个属性:

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

现在尝试调试它是浪费时间!

【讨论】:

  • +1 指出它可能在其中一个类中重复...我已经为父类解决了这个问题...完全忘记了子类!
  • 同意,这有助于了解要查找的内容。感谢分享。
  • 很久以后,但谢谢。我也在使用遗留数据库,现在我正在使用一个有 45 列的表,我不知道出了什么问题……宾果游戏,由于 copypasta 错字,两个属性被映射到同一列.谢谢!
  • 感谢您澄清无用的错误消息。
  • 谢谢伙计。这为我节省了很多时间。就我而言,它是以下重复映射:Property(x =&gt; x.PositionID, map =&gt; map.NotNullable(true));ManyToOne(x =&gt; x.OffertePosition, map =&gt; { map.Column("PositionID"); map.Cascade(Cascade.None); });
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
相关资源
最近更新 更多