2010-08-02 63 views
12

我有一個用戶獲得產品列表的用例,可以選擇多個產品並激活或停用它們。Nhibernate - 更新沒有加載實體的單個字段?

這個列表的模型是不可變的,我有一個存儲庫,它需要一個模型列表,它應該全部禁用它們。

我確實有另一個完整的產品編輯模型,但我寧願不加載數以百計的這些只是改變一列。

我正在使用Session.CreateQuery,但有沒有更好的方法來實現這個?

回答

31

HQL是要走的路。

Session.CreateQuery("update Product set Active = :active where id in (:ids)") 
     .SetParameter("active", active) 
     .SetParameterList("ids", listOfSelectedProductIds) 
     .ExecuteUpdate(); 
+3

有沒有沒有HQL的方法?我想使用已經存在的映射,而不是編寫內聯查詢,這首先是ORM背後的想法。 – 2014-02-14 19:29:55

+0

@ Mr.TA您對HQL有什麼問題?查詢與ORM的架構選擇有什麼關係?你會怎麼做呢? – 2014-02-14 20:03:43

+7

ORM的一個主要目的是避免編寫查詢。您的解決方案將所有反模式整合到一個包中:1)內聯數據庫語句; 2)使用一個巨大的抽象層--NH--本質上稱爲一個簡單的SQL語句 - 沒有很好的理由和巨大的成本; 3)不使用數據模型映射。 (請不要冒犯) – 2014-02-16 02:52:23