使用 TransactionScope 执行 select
Using TransactionScope to perform select
我看到我公司有很多人这样做:
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 tables。您修改了 table 1、table 2,但是当您尝试修改 table 3 时却失败了。如果第 3 次失败,您不希望保留在 tables 1 和 2 中所做的更改。这是您将其包装在事务范围内的地方,因为如果出现错误,所有这些更改都会回滚(或者更确切地说不执行)并且您不必担心它。
你可以阅读更多here。
在事务范围内包装查询只是为了获取数据……我看不出有任何好处。你是对的,没有数据操作,所以真的不必有事务范围。我假设您的一些同事刚刚看到其他人使用了一个,并决定他们也这样做是个好主意。
另一个奇怪的是,他们在 finally 中完成事务范围。如果出现错误,您可能不想完成交易。
我看到我公司有很多人这样做:
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 tables。您修改了 table 1、table 2,但是当您尝试修改 table 3 时却失败了。如果第 3 次失败,您不希望保留在 tables 1 和 2 中所做的更改。这是您将其包装在事务范围内的地方,因为如果出现错误,所有这些更改都会回滚(或者更确切地说不执行)并且您不必担心它。
你可以阅读更多here。
在事务范围内包装查询只是为了获取数据……我看不出有任何好处。你是对的,没有数据操作,所以真的不必有事务范围。我假设您的一些同事刚刚看到其他人使用了一个,并决定他们也这样做是个好主意。
另一个奇怪的是,他们在 finally 中完成事务范围。如果出现错误,您可能不想完成交易。