Я пытаюсь обновить объект nHibernate дочерней коллекцией, используя метод .Update (), найденный в сеансе гибернации.Единственное, что я могу сделать с текущей настройкой, это добавить детей, я не могу их изменить или удалить.
Для пояснения объекты и их сопоставление выглядят следующим образом:
public class Parent {
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual ISet<Child> Children { get; set; } = new HashSet<Child>();
}
public class ParentMap: ClassMap<Parent>
{
public ParentMap()
{
Id(x => x.Id);
Map(x => x.Name);
HasMany(x => x.Children)
.AsSet()
.Inverse()
.Cascade.AllDeleteOrphan();
}
}
public class Child {
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual Parent Parent { get; set; }
}
public class ChildMap: ClassMap<Child>
{
public ChildMap()
{
Id(x => x.Id);
Map(x => x.Name);
References(x => x.Parent);
}
}
Когда я получаю изменения со своего уровня пользовательского интерфейса и пытаюсь обновить уже существующий объект, используя:
using (var tx = _session.BeginTransaction())
_session.Update(newParent);
tx.Commit();
}
Здесь newParent - это временный объект (полученный из базы данных в предыдущем сеансе и показанный в пользовательском интерфейсе), содержащий тот же идентификатор, что и объект, который я хотел бы обновить, но с изменениями в дочерней коллекции.Каким-то образом, используя этот подход, я могу только добавлять детей, но не изменять или удалять их.
Где моя ошибка?