Подтвердить что ты не робот

Nhibernate - обновить одно поле без загрузки объекта?

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

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

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

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

4b9b3361

Ответ 1

HQL - это путь.

Session.CreateQuery("update Product set Active = :active where id in (:ids)")
       .SetParameter("active", active)
       .SetParameterList("ids", listOfSelectedProductIds)
       .ExecuteUpdate();

Ответ 2

Начиная с 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