2010-12-16 13 views
0

私は関係を追加するときにデータベースへのラウンドトリップを減らしたいと思います。親/子を処理する最も効率的な方法

 
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(); 

私は子供のために選択し、子供のための更新のみがあります。しかし、第2レベルのキャッシュでは機能しません。私はセッション2でparent.Children.Add(子)を追加した場合

 
=== 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 === 

、NHibernateのは、親のために選択しませんが、なぜ?私はそれがオーバーヘッドだと思う。

答えて

0

よく、私は親子関係をI.E.カテゴリ私は例ID、名前、ParentIDに含まれる統一カテゴリーを持っています。これを使って、どのレベルにも親子関係を定義できます。

+0

どういう意味ですか? child.parentId = parentId?第2レベルのキャッシュでも機能しません。 – Andy

関連する問題