我有一個更新我的業務實體的例程。更新涉及大約6個不同的表格。所有的命令都在一個事務中執行。如何避免這些死鎖?
最近,我需要將一些代碼添加到從數據庫訪問查找表的例程中。查找代碼已經存在於另一個業務對象中,所以我使用了該業務對象。例如:
Using tr As DbTransaction = myConnection.BeginTransaction()
ExecuteCommand1(tr)
ExecuteCommand2(tr)
If myLookupTable.GetLookupTable().FindById(id).HasFlagSet Then
ExecuteCommand3(tr)
End If
End Using
但是,查找表業務對象掛起/死鎖。我認爲這是因爲它沒有引用原始程序正在使用的事務。
經過一番研究,我試圖把查找表邏輯放在自己的事務中,將IsolationLevel
設置爲ReadUncommitted
。這給了我想要的結果。但是,經過進一步的研究,如果我已經正確實施了這個方法,我現在會進行二次猜測。
假設我的查找表對象對活動事務的引用不可用,那麼我所描述的是否被認爲是最佳實踐?我覺得我可能會錯過一些東西。
command1或command2是否在查找可執行文件? – 2009-05-29 00:18:46