在处理一些更新我的数据库的函数时,我正在编写一些快速测试,以确保我的函数正常执行。当实际更新数据库时,我可以将事务传递给函数然后提交它:
user.Assignment("assignment value for some column in table", connection, transaction)
transaction.Commit()
我很好奇是否有办法编写一个快速测试,可以在提交之前验证事务是否会实际更新某些行?
(pseudoish代码)
user.Assignment("assignment value for some column in table", connection, transaction)
If Not transaction["SomeColumn"] = "Expected value for SomeColumn"
assert("ColumnName was not going to be updated to the expected value!")
transaction.Rollback()
答案 0 :(得分:3)
只要您在连接内部,就可以像平常一样查询数据; 其他来电者将被屏蔽,但您可以完全访问修改过的数据。
如果您使用的是TransactionScope
,这意味着只要在TransactionScope
内创建了该连接,您就可以使用任何命令/连接(到同一个数据库) - 它会自动登记到事务(尽管使用相同的连接实例更有效 - 避免任何跳转到DTC的风险)。
如果您使用DbTransaction
,则必须使用相同的连接实例,并记住在针对连接执行的任何命令上正确设置.Transaction
。
答案 1 :(得分:1)
您可以使用SSMS中的with (nolock)
选择值来检查这些值。如果您想从.NET查看此内容,我相信您可以更改隔离级别并重新查询。