我有一个用例,用户可以获取产品列表,并可以选择多个产品并激活或停用它们。
此列表的模型是不可变的,我有一个存储库,其中包含应该停用它们的模型列表。
我确实有另一个完整的产品编辑模型,但我不需要加载数百个只需更改一列。
我正在使用Session.CreateQuery,但有没有更好的方法来实现这个?
答案 0 :(得分:31)
HQL是最佳选择。
Session.CreateQuery("update Product set Active = :active where id in (:ids)")
.SetParameter("active", active)
.SetParameterList("ids", listOfSelectedProductIds)
.ExecuteUpdate();
答案 1 :(得分:0)
从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