Самый эффективный способ справиться с родителем / ребенком - PullRequest
0 голосов
/ 17 декабря 2010

Я хочу уменьшить количество обращений к базе данных при добавлении отношения.

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, но почему?Я думаю, что это накладные расходы.

1 Ответ

0 голосов
/ 17 декабря 2010

хорошо, когда я обрабатываю родительские / дочерние отношения в категориях IE, у меня есть объединенная категория, которая содержит, например, ID, Name и ParentID, используя это, вы можете определить родительские / дочерние отношения для любого уровня

...