0
我使用流利的NHibernate並嘗試做很多更新。首先想到的是這樣的代碼:是否存在QueryOver的任何方法,如Load for Get?
using (ISession s = OpenSession())
using (s.BeginTransaction())
{
IList<SomeType> items s.QueryOver<SomeType>()
.Where(someCondition)
.List();
items.ForEach(i => {
i.Foo = "bar";
s.Update(i);
});
s.Transaction.Commit();
}
但問題在於,每次更新項目必須在更新之前加載。所以數據庫查詢了兩次。在SQL中,它可以用一個查詢完成,我相信存在一些方法可以在NHibernate中使用一個查詢來完成此操作。並找到Load方法的文檔,實際上並沒有從數據庫中加載項目,只能使用一些代理,而只有在更新/刪除時纔打到數據庫。
存在NHibernate的一些方法,加載不是項目本身,但代理像加載?
對不起,但NH對於這種基於集合的操作來說確實是錯誤的工具。執行此操作的最有效方法是使用HQL或原始SQL。說這個,你有沒有研究過使用'無狀態會話'?這可能是一個有效的妥協。 –
在我編寫此代碼的公司中,我們不使用文本形式的查詢。在這種情況下性能沒有那麼糟糕的寫入SQL或HQL。 IStatelessSession與ISession接口類似,所以對此沒有幫助。 – Daniil
@DavidOsborne無論如何感謝您的回答。 – Daniil