2017-08-07 133 views
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的一些方法,加載不是項目本身,但代理像加載?

+0

對不起,但NH對於這種基於集合的操作來說確實是錯誤的工具。執行此操作的最有效方法是使用HQL或原始SQL。說這個,你有沒有研究過使用'無狀態會話'?這可能是一個有效的妥協。 –

+0

在我編寫此代碼的公司中,我們不使用文本形式的查詢。在這種情況下性能沒有那麼糟糕的寫入SQL或HQL。 IStatelessSession與ISession接口類似,所以對此沒有幫助。 – Daniil

+0

@DavidOsborne無論如何感謝您的回答。 – Daniil

回答

0

對於現在更新大數據的最佳方式是使用HQL或原始SQL如何提及@DavidOsborne。

我不幸找不到任何其他懶惰方式的工作方式。

相關問題