1

Попробовав несколько решений, чтобы получить NHibernate для удаления сиротских записей. Учитывая следующую структуру:Не получать NHibernate Cascade Удалить Сирота, работающая с Automapping

public class Parent { 

    public virtual ICollection<Domain> Domains {get;set;} 

} 
public class Domain{ 

    public virtual Parent Parent {get;set;} 
} 

UPDATE: Это не имеет ничего общего с инкубатором. Это заставило что-то другое пойти не так, как было исправлено. Но удаление сирот еще не происходит я попытался следующие:

  • Добавить атрибут на домены (и на родительское свойство класса домена) в соответствии с http://mookid.dk/oncode/archives/643

  • Добавлено Автоотображение как :

    AutoMap.Override<Parent>(map => { map.HasMany(x => x.Domains).Inverse().Cascade.All(); }) 
    AutoMap.Override<Parent>(map => { map.HasMany(x => x.Domains).Cascade.All(); }) 
    

Оба вызванные записи домена должны быть сохранены с pARENT_ID = нуль.

Есть ли хороший пример того, как достичь этого в сочетании с Automapping?

+0

я не понимаю. Что такое Domains.Remove и Domains.Добавить все о? SetName не имеет для меня никакого смысла. И для первой строки автомата: вам нужно будет установить родительское свойство во вновь созданном экземпляре домена вручную, так как экземпляр домена контролирует взаимосвязь. После этого экземпляр домена должен быть сохранен с родительским идентификатором. –

+0

Это всего лишь пример манипуляции с моделью. При изменении Parent.Name мне нужно удалить 1 домен из коллекции и добавить новый. Проблема не в постоянстве, потому что новые домены сохраняются. Это просто, что записи Orphan Domain не удаляются, но вместо этого их столбец Parent_Id установлен в null – amaters

+0

, можете ли вы опубликовать код для манипуляции с моделью? То, что вы описали, возможно, произойдет, если вы удалите экземпляр домена из коллекции Domains и одновременно манипулируете/удаляете родительскую ассоциацию в экземпляре домена. Возможно, NHibernate нелегко отслеживает потерянный экземпляр. Обновление –

ответ

3

вы не указали deleteOrphan

map.HasMany(x => x.Domains).Inverse().Cascade.AllDeleteOrphan() 
+0

Спасибо за помощь, но все тот же результат. Я все еще получаю записи с нулевым значением как parent_id – amaters

+0

Кажется, это действительно сработало: 'map.HasMany (x => x.Domains) .Cascade.AllDeleteOrphan()' В конце концов, я был почти там :) – amaters