Несколько TransactionScope.Complete() в использовании
У меня есть такой код
try
{
MyModel model = repo.GetData();
if(model == null)
{
return model;
}
else
{
MyResponse response = checkData();
if(response)
{
return model;
}
UpdateData();
}
}
catch(Exception e)
{
....
}
return model;
я хочу добавить TransactionScope
как это.
try
{
using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = IsolationLevel.ReadCommitted }))
{
MyModel model = repo.GetData();
if(model == null)
{
return model;
}
else
{
MyResponse response = checkData();
if(response)
{
return model;
}
UpdateData();
}
ts.Complete();
}
}
catch(Exception e)
{
....
}
return model
И я хочу спросить, это нормально, если у меня есть несколько return
утверждение до достижения кода ts.Complete()
? Я не могу установить ts
в ноль в finally
блок, потому что TransactionScope
находится внутри блока try.
1 ответ
Чтобы ответить на ваш вопрос: это нормально, чтобы вернуться до trans.Complete()? - Да, это. Транзакция не будет принята и изменения не будут применены. Вот как это работает.
Оператор using запускает.Dispose() в любом senarios, даже когда происходит исключение (или возврат).
При удалении транзакции она будет зафиксирована, если был вызван trans.Complete (), и никакие изменения не будут применены, если не будут вызваны.
Об использовании: Что такое блок C# Using и зачем его использовать?
О Transaction.Dispose(): https://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.dispose(v=vs.110).aspx