Nhibernate - 更新单个字段而不加载实体?

时间:2010-08-02 18:16:07

标签: c# nhibernate

我有一个用例,用户可以获取产品列表,并可以选择多个产品并激活或停用它们。

此列表的模型是不可变的,我有一个存储库,其中包含应该停用它们的模型列表。

我确实有另一个完整的产品编辑模型,但我不需要加载数百个只需更改一列。

我正在使用Session.CreateQuery,但有没有更好的方法来实现这个?

2 个答案:

答案 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