[英]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.