Можно ли свободно сконфигурировать NHibernate для удаления дочерних элементов, когда их ссылки установлены в null? - PullRequest
3 голосов
/ 22 июня 2010

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

Спасибо!

Ответы [ 2 ]

7 голосов
/ 22 июня 2010

Вы можете установить опцию каскадного удаления сирот:

HasMany(x => x.Children).KeyColumn("ParentId").AsBag().Inverse()
    .Cascade.AllDeleteOrphan();

Чтобы сделать это, вам нужно удалить дочерний объект из родительской коллекции и очистить сеанс:

using (var txn = session.BeginTransaction())
{
    parent.Children.Remove(child);
    txn.Commit();
}
0 голосов
/ 22 июня 2010

У меня нет Fluent.NH здесь, но я знаю, что вы можете указать тип каскада для отображения. Установка значения all-delete-orphan должна делать то, что вы просите.

Если вы используете конфигурацию, основанную на соглашениях, это должно дать вам отправную точку ..

Каскадное сохранение с беглым автоматическим отображением NHibernate

...