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 Web サイトの例 (以下に示す) を見ましたが、これを使用する方法がわかりません。

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

DoSomethingWithOrderLines(orderLines);

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

敬具

ムハンマド

4

1 に答える 1

0

次のようにすることで、Childrenプロパティへのアクセスを完全に回避できます。

category.Parent = null;

これは回避策にすぎないことは理解していますが、それだけが必要な場合は、最も簡単な解決策です。

于 2011-06-26T08:07:06.153 に答える