使用TransactionScope执行选择
本文关键字:选择 执行 TransactionScope 使用 | 更新日期: 2023-09-27 17:57:40
我看到我的公司有很多人在做这件事:
var transactionOptions = new System.Transactions.TransactionOptions();
transactionOptions.IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted;
using (var transactionScope = new System.Transactions.TransactionScope(System.Transactions.TransactionScopeOption.Required, transactionOptions))
{
try
{
using (DefaultContext ctx = new DefaultContext())
{
return ctx.Item.Where(x => x.State == 1);
}
}
catch (Exception err)
{
throw err;
}
finally
{
transactionScope.Complete();
}
}
我真的需要打开一个事务到Select并调用Complete()方法吗?我以为这只是为了修改数据。。。
有人可以向我解释这是否正确?这是个好主意还是坏主意?没有必要吗?
感谢
因此,如果您对数据库做了很多事情,那么事务范围会很有用。假设您正在修改3个表。您修改了表1和表2,但当您尝试修改表3时,它失败了。如果第三次失败,您不希望保留表1和表2中所做的更改。这就是你将其封装在事务范围中的地方,因为如果出现错误,所有这些更改都会被回滚(或者更确切地说,不进行),你不必担心它
你可以在这里阅读更多。
不过,在事务范围中封装查询只是为了获取数据。。。我看不出有什么好处。你是对的,没有数据操作,所以真的不必有事务范围。我认为,你的一些同事刚刚看到别人使用了一个,他们决定如果他们也这样做,那将是一个好主意。
另一个奇怪的事实是,他们在finally中完成了事务范围。如果抛出错误,您可能不想完成事务。