Nhibernate - как удалить детей? - PullRequest
       7

Nhibernate - как удалить детей?

2 голосов
/ 25 февраля 2010

Я работаю над проектом с NHibernate, классы которого похожи на следующие:

public class Parent {
    public IList Children {get;set;}
    // ...
}

public class Child {
    // ...
}

У меня установлено свойство Children для каскадирования всех / удаления сирот. Поскольку я использую совокупный шаблон и экземпляры класса Child будут ссылаться только в контексте Parent, у меня нет ChildRepository для непосредственного удаления потомков - только ParentRepository. Однако когда я получаю объект Parent и вызываю Parent.Children.Clear (), дочерние элементы из базы данных никогда не удаляются. Как мне этого добиться?

1 Ответ

3 голосов
/ 25 февраля 2010

Удалить дочерние объекты очень просто - просто удалите их из коллекции, а затем сохраните родительский объект. Коллекция должна быть сопоставлена ​​с all-delete-orphans.

parent.Children.Clear();
session.Save( parent );

// or 
parent.Children.RemoveAt(0);
session.Save( parent );

Вы также можете сделать это без вызовов Save (), если ваш FlushMode не имеет значения Never.

session.BeginTransaction();
parent.Children.Clear();
session.Transaction.Commit();

Используя абстракцию @Cris UnitOfWork это может выглядеть так:

using (var uow = new UnitOfWork()) {
    parent.Children.Clear();
}
...