nhprof-一对多双向关联的惰性负载上的无界结果集



我有一个标准的Category域实体,它有相应的子级。即类别及其相应的子类别。如下所示。真的很标准。

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

当我们显示数据时,这似乎很有用,但我想更新我的实体并最终保持它。关于如何指定集合的延迟负载限制,有什么想法吗?

问候

Mohammad

您可以通过执行以下操作来避免完全访问Children属性:

category.Parent = null;

我意识到这只是一个变通方法,但如果这就是你所需要的,那就是最简单的解决方案。

相关内容

  • 没有找到相关文章

最新更新