если вы знаете, что хотите выполнить откат, сделайте это явно.Вам не гарантируется, что Dispose выполнит откат (в случае, если вызов завершен, транзакция будет совершена при вызове Dispose)
на ваш вопрос об использовании или новых / Dispose, которые не эквивалентны
using(var ts = new TransactionScope())
{
}
эквивалентно
TransactionScope ts;
try
{
ts = new TransactionScope();
}
finally
{
ts.Dispose();
}
, чтобы ответить на ваш следующий вопрос. Нет, если вы позвоните в компанию Dispose, ваша транзакция не будет "зависать", она будет либо зафиксирована, либо откатана.Однако, если вы используете новый / dispose, как вы его написали (без блока finally), вы можете столкнуться с ситуацией, когда dispose не вызывается, когда вы ожидаете, что это произойдет (в случае исключения)