У меня была такая же проблема, и я могу найти следующую статью, которая решила мою проблему:
Коллекции с обратным отображением и кэш-память второго уровня NHibernate
В основном, если вы сопоставили свои коллекции как inverse , при удалении дочернего элемента вы также должны обязательно явно удалить его из родительской коллекции, иначе состояние кеша станет недействительным после удаления ребенок. Первое, что нужно проверить - действительно ли отношения должны быть обратными.
Предполагая, что обратное необходимо или желательно , и используя ваш пример:
Вместо чего-то вроде:
Session.Delete(ChildLink);
Вы должны сделать:
ContentPage.ChildLinks.Remove(ChildLink);
ChildLink.ParentPage = null;
Session.Delete(ChildLink);
Вам также может понадобиться явно сохранить объект ContentPage на этом этапе, это зависит от настроек очистки сеанса.
Я использую методы в своих сущностях для управления такими обратными отношениями, например:
public ChildLink
{
public ContentPage ParentPage {get;set;}
public void AddToPage(ContentPage addTo)
{
addTo.ChildLinks.Add(this);
this.ParentPage = addTo;
}
public void RemoveFromPage()
{
ParentPage.ChildLinks.Remove(this);
this.ParentPage = null;
}
}
А затем при удалении дочернего объекта:
ChildLink.RemoveFromPage();
Session.Delete(ChildLink);