Nhibernate - обновить одно поле без загрузки объекта? - PullRequest
12 голосов
/ 02 августа 2010

У меня есть случай использования, когда пользователь получает список продуктов и может выбрать несколько продуктов и активировать или деактивировать их.

Модель для этого списка неизменна, и у меня есть репозиторий, который берет список моделей, которые должны деактивировать их все.

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

Я согласен с использованием Session.CreateQuery, но есть ли лучший способ сделать это?

Ответы [ 2 ]

31 голосов
/ 02 августа 2010

HQL - это путь.

Session.CreateQuery("update Product set Active = :active where id in (:ids)")
       .SetParameter("active", active)
       .SetParameterList("ids", listOfSelectedProductIds)
       .ExecuteUpdate();
0 голосов
/ 08 июля 2019

Начиная с NHibernate 5, вы можете использовать LINQ для обновлений / удалений, например:

session.Query<Product>()
    .Where(p => listOfSelectedProductIds.Contains(p.Id))
    .Update(p => new { Active = active });

Он не будет загружать объекты или увеличивать версии.

https://nhibernate.info/doc/nhibernate-reference/querylinq.html#querylinq-modifying

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...