Nhibernate - 更新没有加载实体的单个字段?
问题描述:
我有一个用户获得产品列表的用例,可以选择多个产品并激活或停用它们。Nhibernate - 更新没有加载实体的单个字段?
这个列表的模型是不可变的,我有一个存储库,它需要一个模型列表,它应该全部禁用它们。
我确实有另一个完整的产品编辑模型,但我宁愿不加载数以百计的这些只是改变一列。
我正在使用Session.CreateQuery,但有没有更好的方法来实现这个?
答
HQL是要走的路。
Session.CreateQuery("update Product set Active = :active where id in (:ids)")
.SetParameter("active", active)
.SetParameterList("ids", listOfSelectedProductIds)
.ExecuteUpdate();
有没有没有HQL的方法?我想使用已经存在的映射,而不是编写内联查询,这首先是ORM背后的想法。 – 2014-02-14 19:29:55
@ Mr.TA您对HQL有什么问题?查询与ORM的架构选择有什么关系?你会怎么做呢? – 2014-02-14 20:03:43
ORM的一个主要目的是避免编写查询。您的解决方案将所有反模式整合到一个包中:1)内联数据库语句; 2)使用一个巨大的抽象层--NH--本质上称为一个简单的SQL语句 - 没有很好的理由和巨大的成本; 3)不使用数据模型映射。 (请不要冒犯) – 2014-02-16 02:52:23