繁体   English   中英

nHibernate 2.0 - 映射复合id *和*多对一关系会导致“无效索引”错误

[英]nHibernate 2.0 - mapping a composite-id *and* many-to-one relationship causes “invalid index” error

我有个问题。 想象一下这个数据模型:

[Person] table has: PersonId, Name1  
[Tag] table has:  TagId, TagDescription  
[PersonTag] has: PersonId, TagId, IsActive

由于[PersonTag]不仅仅是一个简单的多对多连接表,我在nHibernate中创建了所有三个实体(就像它们在数据模型中一样)。 因此, PersonTag需要一个复合id,我已经映射到这样的类:

<composite-id name="PersonTagKey" class="PersonTagKey">
  <key-property name="PersonId"></key-property>
  <key-property name="TagId"></key-property>
</composite-id> 

我想遍历对象图,并能够从检索到的PersonTag对象中查看PersonTag对象。 所以,我在PersonTag对象上有属性来做,像这样映射:

<many-to-one name="Person" column="PersonId" lazy="proxy" cascade="none" class="Person"/>
<many-to-one name="Tag" column="TagId" lazy="proxy" cascade="none" class="Tag"/>

当我尝试创建一个PersonTag对象并保存它时,我得到一个“此SqlParameterCollection的无效索引n,其中Count = n”错误。 我知道这是因为我已经两次映射了PersonIdTagId属性,一次是复合id,一次是多对一关系。 如果我不映射多对一对象,那么一切正常。

有没有办法让我能够在同一个nHibernate实体中建模的同一列中拥有复合ID和多对一关系?

凯,这是答案。 几乎没有关于此的文档:

<composite-id name="PersonTagKey" class="PersonTagKey"> 
  <key-many-to-one name="Person" column="PersonId" lazy="proxy" class="Person">
  <key-many-to-one name="Tag" column="TagId" lazy="proxy" class="Tag"/>
</composite-id>

这将允许您创建由多对一关系的倒数组成的复合ID。

好狩猎......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM