如何將下列SQL查詢轉換爲NHibernate?NHibernate - 使用固定值更新多行的選定字段
UPDATE MyTable
SET Field1 = "NewValue1",
Field2 = "NewValue2"
WHERE Field3 = FilterValue
假設MyTable
蘊藏着巨大的記錄,上面的語句會影響其良好的百分比。它有50個字段(列),其中一些字段包含長字符串或引用其他表,我會避免不必要地加載/更新。
現在我實現它的方式是如下:
entities = nhSession.QueryOver<T>().Where(whereJunction).List();
nhSession.SetBatchSize(batchSize);
transaction = nhSession.BeginTransaction();
foreach(entity in entities)
{
//Modify entity here...
//nhSession.Update(entity);//No need to call this. Commit() will do.
}
transaction.Commit();
即使配料有助於提高性能,這種方法有以下缺點:
- 執行最終降低性能多個語句。
- 長
foreach
循環。 - 使用
nhSession.Flush()
沒有克服缺點。
優點是,更新反映在緩存中。
另一種方式是,我不考慮以下原因HQL
:
- 字符串;我不太喜歡他們。這是我切換到
ORM
的原因之一。 - 不是強類型。重構是困難的。
- 更新未反映在緩存中。
- 我不確定這是否授予UoW(NHibernate Transaction)。
另一種方法是我不想使用的原始SQL
。我想堅持使用ORM。
參考文獻:
Link1:問題和所有答案提示我上面已經提到的方式。
Link2:和我上面已經提到的一樣。
Link3:和上面已經提到的一樣。
注意:我還添加了'hibernate'標籤,假設類似的解決方案也可用於NHibernate;順便說一句,他們是雙胞胎。
我選擇使用自定義字符串生成自動化建設HQL。謝謝。 –
我們做同樣的事情。它是簡單的有效的..好運與NHibernate;) –