Свободное соглашение каскадного удаления NHibernate для агрегатных корней - PullRequest
0 голосов
/ 07 ноября 2010

Вопрос: как написать соглашение, которое предотвращает удаление ссылки на сущность, если она наследуется от типа Root?


Я использую свободный nhibernate, и это функция автоматического сопоставления.По умолчанию включено каскадное удаление.

Все было действительно круто, пока я наконец не наткнулся на случай, когда мне действительно нужно удалить агрегатный корень, который ссылается на другой.

У меня есть корни User и Application.User регистры Applications.Если он зарегистрирован по ошибке, существует небольшой промежуток времени, в течение которого User с ролью Admin может удалить его (я уверен, мне никогда не понадобятся эти данные).

Когда User удаляет Application из-за каскадного удаления, nhibernate сам удаляет User (что за ирония ...).


Я не уверен, какукажите каскадное сохранение SaveUpdate для приложения-> Только для ассоциации пользователей:

alt text


Делает хитрость:

m.References(x=>x.RegisteredBy).Cascade.SaveUpdate(); //RegisteredBy.Type==User

Дополнительно, сказал fnh, где искатьпереопределения:

var m=new AutoPersistenceModel(storeCfg);
m.UseOverridesFromAssembly(assembly);

1 Ответ

1 голос
/ 07 ноября 2010

Вы можете переопределить поведение каскадирования для Application-> User Ассоциации.Вам нужно установить SaveUpdate () вместо all-delete-orphan.Для этого вам нужно будет реализовать IAutomappingOverride<Application>

...