C# Transactionscope。列表中的第一项不需要工作
我将SQLServer与C一起使用C# Transactionscope。列表中的第一项不需要工作,c#,transactionscope,C#,Transactionscope,我将SQLServer与C一起使用 foreach(var item in list) { TransactionOptions transOption = new TransactionOptions(); transOption.IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted; using (TransactionScope scope = new TransactionSc
foreach(var item in list)
{
TransactionOptions transOption = new TransactionOptions();
transOption.IsolationLevel =
System.Transactions.IsolationLevel.ReadUncommitted;
using (TransactionScope scope = new
TransactionScope(TransactionScopeOption.Required, transOption))
{
//Code to select
//Code to insert
scope.Complete();
}
}
首次未提交列表事务中的第一项。但我可以在SQL分析器中看到select和insert查询。在任何地方都没有例外
但第二次是列表中的第二项,其余的项也被提交
如果我改为TransactionScopeOption.Suppress,则第一项本身将被提交。但我不知道什么是“压制”
TransactionScope(TransactionScopeOption.Suppress, transOption))
{
//Code to select
//Code to insert
scope.Complete();
}
那么你知道为什么TransactionScopeOption.Required和TransactionScopeOption.RequiredNew不能提交吗?要获得提交,我需要做哪些更改
提前感谢您的帮助。尝试重新构造代码,如下所示:
TransactionOptions transOption = new TransactionOptions();
transOption.IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted;
using (TransactionScope scope = new
TransactionScope(TransactionScopeOption.Required, transOption))
{
foreach(var item in enter code here`list)
{
//your code
scope.Complete();
}
}
有关Suppress是什么的详细信息,请参阅论坛问题。很难说为什么第一项会有奇怪的行为。但在这里你应该知道几件事: 事务提交 实际提交不在作用域上。完成;,它发生在处理TransactionScope时 交易范围选项 TransactionScopeOption。必需保证作用域中的指令将由事务包装。它可以通过两种方式实现:a如果存在外部环境事务,那么内部范围不创建自己的事务。如果调用了outerScope.Complete,然后释放了外部事务作用域,则会发生实际提交。如果没有外部事务,则会创建自己的事务 TransactionScopeOption.RequiresNew始终创建自己的独立事务 TransactionScopeOption.Suppress不创建任何事务并忽略任何外部事务。因为没有任何事务可以保存更改,所以不需要作用域;您无法回滚更改
我希望这些信息能帮助您了解您的具体情况。是的,我可以照您所说的做,但我希望提交每个项目,而不是等待完成整个列表。因为列表包含50多条记录。@KathirVey请查看我的编辑。我将scope.Complete放入循环中,以逐个提交每个插入。尝试过,但这也会给出一个错误。错误类似于第二个item.outerScope.Complete的事务预期行:2,但实际行:1-我认为我们有外部NHibernate会话。TransactionScopeOption.Required-完成整个列表后是否提交?表示foreach的结束。基本上,外部TransactionScope不是外部NHibernate会话。TransactionScopeOption.Required应在每次迭代中创建一个新事务。由于您的代码示例不完整,我无法回答您的问题。我认为你能自己回答你的问题。只需在调试中尝试。