我希望能夠在死鎖發生時重新運行事務。在Ayende's blog post他提到你需要扔掉整個NHibernate會話並重新開始。在Session-Per-Request Web環境中發生死鎖後重新發生事務
重新啓動會話在Windows應用程序中相對比較簡單,但是如何在使用Session-Per-Request模塊時在Web應用程序中執行此操作?會話在IHttpModule中打開和關閉。我能想到的唯一方法是以某種方式重新發布http帖子。這很麻煩,並且最終還會重新執行已成功提交的其他事務(因爲我們每個會話都有多個事務)。
另一種方法是找出爲什麼僵局首先發生。看看死鎖圖。也許通過更改程序或添加索引來修復死鎖。 –
是的,這就是大家都說的,但是如果僵局已經發生,那就太遲了。 – cbp
有點太晚了?這是你唯一能夠解決死鎖的時間。如果您正在運行mssql,則設置一個跟蹤來捕獲死鎖事件,包括死鎖圖。通過查看兩個陳述是否僵持,你將學到很多東西。我多次遇到這種情況。 –