2008-12-16 55 views
1

任何帮助,你可以给非常感激地接受。我一直在反复研究这个问题,似乎无法找到解决方案。 。它可能是在盯着我的脸:(nhibernate,父母和孩子导致重复键的阶级

我曾与父母和子女的列表下面的类在层次结构表中坚持

class Item 
{ 
    public virtual int Id {get;set;} 
    public virtual List`<Item`> Parents {get;set;} 
    public virtual List`<Item`> Children {get;set;} 
} 

在休眠设置,我有:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
    assembly="Pl.Components" namespace="Pl.Components"`> 
    <class name="Pl.Components.Item, Pl.Components" table="Item"> 
     <id name="Id" type="Int32" column="Id" > 
      <generator class="identity" /> 
     </id> 
     <bag name="Parents" lazy="true" table="Hierarchy" cascade="save-update"> 
      <key column="ChildId"/> 
      <many-to-many class="Item" column="ParentId" /> 
     </bag> 
     <bag name="Children" lazy="true" table="Hierarchy" cascade="delete"> 
      <key column="ParentId"/> 
      <many-to-many class="Item" column="ChildId"/> 
     </bag`> 
    </class> 
</hibernate-mapping> 

这导致重复键在层次结构表作为密钥对被插入了孩子和家长都。

有没有解决这个Ø而不是在单独的表中保留父层次结构和子层次结构?

+0

上面的映射是当前的实现,但这会尝试在表中插入重复的parentId,childId - 为父项和子项插入。 我试过了cascade属性的各种设置。 当然,有一种方法可以为PHierachy和层次结构建模而不用单独的表格吗? – user46702 2008-12-16 17:35:52

+0

您是否尝试过在键列上指定foreign_key名称? – Tigraine 2008-12-17 10:58:49

回答