NHibernate многие-ко-многим и удаление элемента - PullRequest
0 голосов
/ 18 сентября 2010

У меня есть связь многих со многими между Lists и ListItems: List знает о своих Элементах, но ListItem не знает о содержащихся списках. Каскад сохранен.

Итак, всякий раз, когда я пытаюсь удалить сущность ListItem, я получаю SQLException, говоря, что я нарушаю ссылочную целостность. NHibernate пытается удалить мой ListItem, не удаляя соответствующую строку в таблице ссылок. Вопрос в том, можно ли дать NHibernate команду удалить мой ListItem, не нарушая ссылочную целостность?

Если мне нужно вручную удалить элемент из всех содержащих списков, как мне это правильно сделать?

Большое спасибо за любые советы.

ула

1 Ответ

0 голосов
/ 19 сентября 2010

Вам нужно установить сопоставление для ребенка на inverse=true. От другой поток :

При вызове SaveOrUpdate NHibernate сначала удаляет всех детей объекты. Тогда, потому что ни отношения помечены как обратные, NHibernate также пытается установить столбец внешнего ключа в вашей дочерней таблице к нулю. Поскольку строки уже был удален, вы получите второй ошибка. Вам нужно установить обратный = true на одна сторона ваших отношений, чтобы исправить этот. Обычно это делается на одном (первичный ключ или родительская) сторона. если ты не делай этого, NHibernate сделает соответствующие обновления для каждой стороны отношений.

public class StoreMap : ClassMap<Store>
{
  public StoreMap()
  {
    Id(x => x.Id);
    Map(x => x.Name);
    HasMany(x => x.Staff)
      .Inverse()         // Magic code!
      .Cascade.All();
  }
}
...