Ответ 1
HQL - это путь.
Session.CreateQuery("update Product set Active = :active where id in (:ids)")
.SetParameter("active", active)
.SetParameterList("ids", listOfSelectedProductIds)
.ExecuteUpdate();
У меня есть прецедент, когда пользователь получает список продуктов и может выбирать несколько продуктов и активно или деактивировать их.
Модель для этого списка неизменна, и у меня есть репозиторий, который берет список модели, которая должна дезактивировать их все.
У меня есть еще одна полная модель редактирования продукта, но мне бы не пришлось загружать сотни из них, чтобы просто изменить один столбец.
Я рассматриваю использование Session.CreateQuery, но есть ли лучший способ это сделать?
HQL - это путь.
Session.CreateQuery("update Product set Active = :active where id in (:ids)")
.SetParameter("active", active)
.SetParameterList("ids", listOfSelectedProductIds)
.ExecuteUpdate();
Начиная с 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