Проблемы с удалением объекта с помощью nhibernate - PullRequest
0 голосов
/ 30 августа 2010

У меня проблемы с удалением объекта. Я получаю следующую ошибку:

[Test.Item # ab9a9869-b2c1-4262-8d33-9dd9010abd96] [SQL: УДАЛИТЬ ИЗ InvoerItem ГДЕ DbId =? И версия =?]

Оператор DELETE конфликтует с ограничением REFERENCE "FK9100B9F130A0A610". Конфликт произошел в базе данных "", таблица "dbo.InvoerItemToInvoerItem", столбец "Listener_id".

Ситуация такая: у меня есть объект, у которого есть коллекция ссылок на другие объекты того же рода, которые называются листенерами.

Отображение для объекта выглядит так:

public InvoerItemMap()
{
    HasManyToMany(x => x.Listeners)
        .ChildKeyColumn("Listener_id")
        .Cascade.None()
        .Access.CamelCaseField(Prefix.Underscore);
}

Что вызывает исключение при удалении объекта, к которому подключены слушатели? Должен ли я изменить отношение слушателей?

1 Ответ

0 голосов
/ 30 августа 2010

Нет, обратное не помогает.

вам нужно указать, что вы хотите делать со слушателями. Есть в основном два варианта:

  • сообщить пользователю, что вокруг есть слушатели, и он не может удалить этот объект
  • отменить регистрацию слушателей с помощью программного обеспечения.

Если вы решили отменить регистрацию слушателей, тогда ... просто реализуйте это.

InvoerItem itemToDelete = ...;
itemToDelete.Listeners.Clear();
session.Delete(itemToDelete);

Было бы еще лучше позволить сущности управлять слушателями:

itemToDelete.UnregisterListeners();

Редактировать : если у вас есть ссылки от слушателей на invoerItems, вам также необходимо удалить их:

public void UnregisterListeners()
{
    foreach(Listener listener in Listeners)
    {
        listener.Invoeritem = null;
    }
    Listeners.Clear();
}

Кстати: в этом случае вы должны сделать слушателей обратными. Не забудьте сопоставить его с тем же внешним ключом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...