我有一个更新我的业务实体的例程。更新涉及大约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