Использование для IDbConnection / IDbTransaction безопасно использовать?

Хотя моё предположение может показаться субъективным, после некоторых исследований я обнаружил, что нередко найти разработчиков, которые предпочитают манекенTry/Catch вместо использованияИспользуя заявление заIDbConnection/IDbTransaction обработка (Закрыть / Применить / Откат).

Это справедливо даже для самых опытных разработчиков и некоторых новых. Я намеренно не собираюсь ссылаться ни на один вопрос о StackOverflow или ссылках на форуме в качестве примера, чтобы люди не обижались. Изчто я нашел, С помощью заявлениебезопасно использовать (каламбур не предназначен).

Что-то не так с этим? Рассмотрим следующий код:

Public Sub Commit()
  Dim cn As IDbConnection = {CREATE_CONNECTION}
  Dim tran As IDbTransaction = Nothing

  cn.Open()
  Try
    tran = cn.BeginTransaction
    'run some queries here
    tran.Commit()
  Catch ex As Exception
    If Not tran Is Nothing Then tran.Rollback()
    Throw
  Finally
    cn.Close()
  End Try
End Function

Предполагать{CREATE_CONNECTION} является держателем дляSub это создает соединение, в зависимости от поставщика базы данных, написанное в соответствии со всеми возможными лучшими практиками, и не требует дальнейшего улучшения.

Есть ли причина, по которой приведенный выше код нельзя переписать так:

Using cn As IDbConnection = {CREATE_CONNECTION}
  cn.Open()
  Using tran As IDbTransaction = cn.BeginTransaction
    'run some queries here
    tran.Commit()
  End Using
End Using

?

Очевидно, что версия №2 более интуитивно понятна тому, что она делает. Но, может быть, мне здесь не хватает чего-то важного? Такие вещи, как специфичные для поставщика реализации библиотек доступа к данным, которые не вызываютTransaction.Commit и / илиConnection.Close наDispose внутри? Этот подход будет выведен из эксплуатации в ближайшем будущем или не будет расценен какдостаточно ясно в современной модели программирования / лучшие практики? Инструменты разработки для моно / мобильных приложений, в которых отсутствует поддержка отладкиUsing ключевое слово?

Я ищу любой ответ, чтобы поддержать или опровергнуть суть. Желательно с цитатами из оригинальной документации, что-то вродеDo not use Using with IDbTransaction when ..., Ссылки на блоги или личный опыт тоже в порядке.

Ответы на вопрос(2)

Ваш ответ на вопрос