NHibernate:删除多对多关系中的记录

时间:2011-08-27 07:26:31

标签: nhibernate orm

我有一个对象Customer,此对象的ISet列表为Contact。当我删除Customer时,我想删除Contact

我使用下面的映射,我尝试了级联中的所有选项,但仍然有这个问题: DELETE语句与REFERENCE约束“FK4FF8F4B29499D0A4”冲突。冲突发生在数据库“MyDB”,表“dbo.Contact”,“Customer”列中。

映射Customer

<set name="Contacts" table="CustomerContact" cascade="save-update">
    <key column="Customer" />
    <many-to-many class="Contact" column="Contact" />
</set>

映射Contact

<many-to-one name="Customer" column="Customer" not-null="true" />

2 个答案:

答案 0 :(得分:3)

奇怪的是,您在客户和联系人之间建立了bidirectional关联。如果客户可以与多个联系人关联,反之亦然,那么双方都应该有多对多联系人。但是你在联系方面有多对一的关系。并且您提到要将删除级联到联系人。

也许您应该考虑将联系人集合映射为一对多?尝试使用此客户映射,请注意inverse属性。

<set name="Contacts" 
     table="CustomerContact" 
     inverse="true" 
     cascade="all-delete-orphan" >

    <key column="Customer" />
    <one-to-many class="Contact" />
</set>

使用此联系人映射:

<many-to-one name="Customer" column="Customer" />

您还必须“追逐指针”:当从Customer.Contacts集合中删除相应的联系人时,将$ Customer输出。

答案 1 :(得分:0)

拥有两个属性

 inverse="true" 

 cascade="all-delete-orphan" 

是关键..

除此之外,您还可以在删除客户对象时执行此操作:

customer.Contacts.Clear();
Session.Delete(customer);
相关问题