首页 文章

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

提问于
浏览
1

我有一个单向的多对多关联: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:

<hibernate-mapping xmlns = "urn:nhibernate-mapping-2.2" default-access = "property" auto-import = "true" default-cascade = "all" default-lazy = "false"> <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 =“ `ListDefinition` ”> <id access = "nosetter.camelcase-underscore" name = "Id" type = "System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <column name = "Id" /> <generator class = "identity" /> </ ID> <list cascade = "all-delete-orphan" name = "Columns" table = "ListColumnDefinitionToListDefinition" mutable = "true"> <键> <column name = "ListDefinition_id" /> </ key> <索引> <column name =“ `index` ”/> </指数> <many-to-many class = "Domain.Lists.Definitions.ListColumnDefinition, Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"> <column name = "ListColumnDefinition_id" /> </多到许多> </列表>

</ class> </ hibernate-mapping>

1 回答

  • 1

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

    来自第21.3节 . 以上链接的级联生命周期:

    在我们的案例中,如果没有父母,孩子就不能存在 . 因此,如果我们从集合中删除一个Child,我们确实希望将其删除 . 为此,我们必须使用cascade =“all-delete-orphan” .

相关问题