【发布时间】:2019-07-08 22:16:52
【问题描述】:
我有一个用例,用户获取产品列表,并且可以选择多个产品并激活或停用它们。
此列表的模型是不可变的,并且我有一个存储库,其中包含应该将它们全部停用的模型列表。
我确实有另一个完整的产品编辑模型,但我宁愿不必加载数百个模型来简单地更改一列。
我正在考虑使用 Session.CreateQuery,但有没有更好的方法来完成这个?
【问题讨论】:
标签: c# nhibernate
我有一个用例,用户获取产品列表,并且可以选择多个产品并激活或停用它们。
此列表的模型是不可变的,并且我有一个存储库,其中包含应该将它们全部停用的模型列表。
我确实有另一个完整的产品编辑模型,但我宁愿不必加载数百个模型来简单地更改一列。
我正在考虑使用 Session.CreateQuery,但有没有更好的方法来完成这个?
【问题讨论】:
标签: c# nhibernate
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
【讨论】: