我有一个对象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" />
答案 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);