从NHibernate中的多对多关联中删除项目

时间:2010-09-13 19:14:34

标签: nhibernate many-to-many

我有一个单向的多对多关联:ListDefinition类具有IList类型的Columns属性,而列可以是多个ListDefinition-s的一部分。问题是,每当我尝试从一个Columns集合中删除一个列(不删除它或从其他ListDefinitions中删除)时,我就会收到此错误:
已删除的对象将通过级联重新保存(从关联中删除已删除的对象)[Domain.Lists.Definitions.ListColumnDefinition#2]

我的映射是通过Fluent NH生成的:

mapping.HasManyToMany(list => list.Columns)
.AsList(part => part.Column("`index`"))
.Cascade.AllDeleteOrphan()

这是生成的hbm:

&lt; hibernate-mapping xmlns =“urn:nhibernate-mapping-2.2”default-access =“property”auto-import =“true”default-cascade =“all”default-lazy =“false”&gt; <登记/>   &lt; class xmlns =“urn:nhibernate-mapping-2.2”mutable =“true”name =“Domain.Lists.Definitions.ListDefinition,Domain,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null”table =“{ {1}}“&GT;
    &lt; id access =“nosetter.camelcase-underscore”name =“Id”type =“System.Int32,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089”&gt;

      &lt; column name =“Id”/&gt;
      &lt; generator class =“identity”/&gt;
    &LT; / ID&GT;
    &lt; list cascade =“all-delete-orphan”name =“Columns”table =“ListColumnDefinitionToListDefinition”mutable =“true”&gt;

      &LT;密钥GT;
        &lt; column name =“ListDefinition_id”/&gt;       &LT; /密钥GT;
      &LT;索引&gt;
        &lt; column name =“ListDefinition”/&gt;
      &LT; /索引&gt;
      &lt; many-to-many class =“Domain.Lists.Definitions.ListColumnDefinition,Domain,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null”&gt;
        &lt; column name =“ListColumnDefinition_id”/&gt;
      &LT; /多到许多&GT;
    &LT; /列表&gt;

&LT; /类&GT; &LT; /休眠映射&GT;

1 个答案:

答案 0 :(得分:1)

您确定“all-delete-orphan”是您想要的吗?

从第21.3节。级联生命周期的上述环节:

  

在我们的案例中,儿童不可能存在   没有父母。所以,如果我们删除一个   来自收藏的孩子,我们确实想要   它被删除。为此,我们必须这样做   使用cascade =“all-delete-orphan”。