2011-06-25 22 views
1

対応する子を持つ標準カテゴリドメインエンティティがあります。カテゴリおよびそれに対応するサブカテゴリを含む。これを以下に示します。本当にかなり標準的なもの。nhibernate - nhprof -unbounded 1対多の双方向アソシエーションの遅延ロードでの結果

public class Category : Entity 
{ 
    private IesiCollections.ISet<Category> _children; 

    public Category() 
    { 
     _children = new HashedSet<Category>(); 
    } 

    public virtual string Name { get; set; } 
    public virtual string Description { get; set; } 
    public virtual Category Parent { get; private set; } 
    public virtual ICollection<Category> Children { get { return _children; } } 

    public virtual bool AddCategory(Category category) 
    { 
     if (category != null && _children.Add(category)) 
     { 
      category.SetParent(this); 
      return true; 
     } 

     return false; 
    } 

    public virtual bool RemoveCategory(Category category) 
    { 
     if (category != null && _children.Remove(category)) 
     { 
      category.SetParent(null); 
      return true; 
     } 

     return false; 
    } 
} 

NHibernateプロファイラを使用して、すべてが最適に動作していることを確認しています。しかし、 "RemoveCategory"メソッドを呼び出してサブカテゴリを削除し、カテゴリを渡すと、 "_children"という名前の基底のコレクションにアクセスし、 "_children"コレクションの遅延ロードを開始します。

NHProfで「無制限の結果セット」アラートが発生します。これは、制限が指定されていないため意味があります。コレクション全体をロードします。私はこのコレクションが潜在的にかなり大きくなる可能性があるので、制限を指定したいと思います。

nhprofウェブサイトの例(無制限の結果について)を見てきましたが、これをどのように使用するのか分かりません。

var order = session.Get(orderId); 
var orderLines = session.CreateFilter(order.OrderLines, "") 
    .SetFirstResult(0) 
    .SetMaxResults(25) 
    .List(); 

DoSomethingWithOrderLines(orderLines); 

これはデータを表示しているときに便利ですが、エンティティを更新して最終的に保持したいと考えています。コレクションの遅延ロードの制限をどのように指定できるかについてのアイデアはありますか?

種類は

ムハンマド

について

答えて

0
あなたはこのような何か行うことによって、完全に子供のプロパティにアクセスする避けることができ

:それがすべてだ場合、これが唯一の回避策ですが、私は実現

category.Parent = null; 

を必要なのは、最も簡単な解決策です。

関連する問題