NHibernate: удаление записи во многих отношениях - PullRequest
1 голос
/ 27 августа 2011

У меня есть объект Customer, у этого объекта список ISet Contact.Когда я удаляю Customer, я хотел бы удалить Contact.

. Я использую приведенное ниже отображение, я перепробовал все опции в каскаде, но все еще имею эту проблему: Оператор 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>

Отображение Contact

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

Ответы [ 2 ]

3 голосов
/ 27 августа 2011

Странно, что у вас двунаправленная связь между клиентом и контактом, отображаемым таким образом.Если Клиент может быть связан с несколькими Контактами, и наоборот, у вас должно быть много ко многим с обеих сторон.Но у вас есть много к одному на контактной стороне.И вы упоминаете, что хотите каскадно удалять в Контакт.

Возможно, вам следует рассмотреть возможность сопоставления коллекций контактов как один-ко-многим ?Попробуйте это для сопоставления клиентов, обратите внимание, атрибут обратного .

<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.

0 голосов
/ 27 августа 2011

с двумя свойствами

 inverse="true" 

и

 cascade="all-delete-orphan" 

это ключ ..

кроме этого, вы можете сделать это при удалении объекта клиента:

customer.Contacts.Clear();
Session.Delete(customer);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...