簡體   English   中英

NHibernate FlushMode Never問題

[英]Problems with NHibernate FlushMode Never

我們正在使用NHibernate作為ORM層來構建大型應用程序。 我們嘗試了盡可能多的最佳實踐,其中將FlushMode設置為Never 但是,這使我們感到痛苦,例如以下情形:

有一個帶有結束日期列的表。 在此表中,我們刪除最后一個記錄(按結束日期):

  • 記錄被刪除;
  • 刪除之后,我們(存儲庫)查詢最后一條記錄(按結束日期);
  • 最后一條記錄已更新,因為它是新的活動記錄。

這是一個非常簡單的場景,其中有許多場景。 這里的問題是,當我們執行查詢時,我們會找回刪除的記錄,這當然是不正確的。 這大致意味着,由於其響應,我們無法在業務邏輯中進行可能接觸到要插入或刪除的實體的查詢。 還不在那里或仍然在那里。

我如何處理這種情況? 有什么方法可以解決此問題而無需恢復FlushMode設置,還是我應該完全放棄FlushMode設置?

我如何處理這種情況? 有沒有辦法解決此問題而無需恢復FlushMode設置

FlushMode.Never不會阻止您要處理最新數據時手動調用Flush() 我想這是在不更改FlushMode情況下解決此問題的方法

還是我應該一起放棄FlushMode設置?

您能否提供有關FlushMode.Never參考信息?在一般情況下,這不是一種好的做法嗎? 看起來像FlushMode.Never適合處理大型的,大多數為只讀的對象集。

http://jroller.com/tfenne/entry/hibernate_understand_flushmode_never

只有當您絕對需要細粒度的控制時, FlushMode.Never才是最佳實踐。 FlushMode.Auto將覆蓋99.99%的情況,而不會出現問題。 就是說,使用ISession.FLush()裝飾CUD操作不會有什么壞處,因為如果內部操作隊列中有任何CUD操作,則只涉及數據庫往返

刷新模式Never意味着NHibernate永遠不會刷新會話,這取決於您。 因此, session.Delete()實際上不會從數據庫中刪除記錄,只是將對象標記為要在會話的緩存中刪除。 您可以強制通過調用刷新session.Flush()調用后session.Delete()

我認為Auto是更好的選擇,有了Auto ,NHibernate將在查詢數據之前自動刷新會話。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM