NHibernate:删除多对多关系中的记录
我有一个对象NHibernate:删除多对多关系中的记录,nhibernate,orm,Nhibernate,Orm,我有一个对象客户,这个对象有一个ISet联系人列表。当我删除客户时我想删除联系人 我使用下面的映射,我尝试了cascade中的所有选项,但仍然存在此问题: DELETE语句与引用约束“FK4FF8F4B29499D0A4”冲突。冲突发生在数据库“MyDB”、表“dbo.Contact”、列“Customer”中 映射客户 <set name="Contacts" table="CustomerContact" cascade="save-update"> <key co
客户
,这个对象有一个ISet
联系人列表。当我删除客户时
我想删除联系人
我使用下面的映射,我尝试了cascade中的所有选项,但仍然存在此问题:
DELETE语句与引用约束“FK4FF8F4B29499D0A4”冲突。冲突发生在数据库“MyDB”、表“dbo.Contact”、列“Customer”中
映射客户
<set name="Contacts" table="CustomerContact" cascade="save-update">
<key column="Customer" />
<many-to-many class="Contact" column="Contact" />
</set>
<many-to-one name="Customer" column="Customer" not-null="true" />
奇怪的是,客户和联系人之间有这样的关联映射。如果客户可以与多个联系人关联,反之亦然,那么双方都应该有多对多。但你们在接触端有多对一。您提到要将删除级联到联系人
也许您应该考虑将联系人集合映射为<强>一对多< <强> >。对于客户映射,请尝试此操作,注意属性
<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.Contact设置为空 具有两种属性
inverse="true"
及
这是关键
除此之外,您还可以在删除客户对象时执行以下操作:
customer.Contacts.Clear();
Session.Delete(customer);
我的猜测是设置所有删除孤儿,但似乎你已经尝试过了。试着看看这个答案。感谢Dmitry 100%的工作:)有时候要理解NHibernate中的所有属性(反转…)并不容易
customer.Contacts.Clear();
Session.Delete(customer);