Использование для 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 ...
, Ссылки на блоги или личный опыт тоже в порядке.