2011-08-27 80 views
1

我有一个对象Customer,该对象有一个ISet列表Contact。当我删除Customer时,我想要删除ContactNHibernate:在多对多关系中删除记录

我使用映射之下,我试着在级联的所有选项,但仍然有这样的问题: DELETE语句冲突与基准约束“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

我的猜测是t o设置全部删除孤立,但似乎你已经尝试过。尝试看看这个答案http://stackoverflow.com/questions/302720/how-to-delete-child-object-in-nhibernate/302860#302860。 – Iridio

回答

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.Contact时对应的联系从Customer.Contacts集合中删除。有两个化子性质

inverse="true" 

cascade="all-delete-orphan" 

是关键..

+0

感谢德米特里工作100%:)有时候不容易理解NHibernate中的所有属性(反转,...) –

0

从这个

除了可以和这样做,同时删除客户对象:

customer.Contacts.Clear(); 
Session.Delete(customer);