【发布时间】:2009-05-29 00:01:23
【问题描述】:
我有一个例程正在更新我的业务实体。更新涉及大约 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 是否对查找表进行了处理?
-
不,他们没有。他们甚至不读它。但是,它们使用对查找表具有 FK 的表。这些都没有直观地向我暗示锁定问题。
标签: asp.net sql-server ado.net