nhibernate - nhprof-неограниченный результирующий набор при ленивой нагрузке для двунаправленной ассоциации один ко многим - PullRequest
1 голос
/ 25 июня 2011

У меня есть стандартная сущность домена 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);

Это кажется полезным, когда мы отображаем данные, но я хочу обновить свою сущность и в конечном итоге сохранить ее.Любые идеи о том, как я могу указать ограничение на ленивую загрузку коллекции?

С уважением

Мухаммед

1 Ответ

0 голосов
/ 26 июня 2011

Вы можете просто избежать полного доступа к свойству Children, выполнив что-то вроде этого:

category.Parent = null;

Я понимаю, что это только обходной путь, но если это все, что вам нужно, это самое простое решение.

...