Я хочу уменьшить количество обращений к базе данных при добавлении отношения.
public class Parent
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual IList Children { get; set; } //inverse = true; cascade = all
}
public class Child
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual Parent Parent { get; set; }
}
Child child = Session.Get(1);
Parent parent = Session.Load(1);
child.Parent = parent;
Session.Flush();
Это работает, у меня есть только выбор для ребенка и обновление для ребенка.Но это не работает с кэшем второго уровня.
=== Session 1 ===
Parent parent = Session.Get(1);
var count = parent.Children.Count;
=== Session 1 ===
=== Session 2 ===
Child child = Session.Get(1);
Parent parent = Session.Load(1);
child.Parent = parent;
Session.Flush();
=== Session 2 ===
=== Session 3 ===
Parent parent = Session.Get(1);
var count = parent.Children.Count; //INCORRECT! Session 2 didn't update collection.
=== Session 3 ===
Если я добавлю parent.Children.Add (child) в Сессию 2, NHibernate действительно выберет для parent, но почему?Я думаю, что это накладные расходы.