В зависимости от природы SQL и его соответствия в приложении, вам может быть целесообразнее вкладывать транзакции, обеспечивая наличие транзакции независимо от контекста вызова.
Например, вы можете заключить код вызова в блок TransactionScope
. Если присутствует транзакция, это не окажет реального влияния на операцию. Если транзакция отсутствует, она создаст транзакцию и обеспечит участие кода ADO.NET в транзакции.
Этот подход работает только в том случае, если вы довольны выполнением SQL как одной операции. Если его следует вызывать только как часть более крупной транзакции, этот подход не поможет.
Чтобы точно знать, что транзакция присутствует, вы должны проверить явную транзакцию в команде ADO.NET (как вы это сделали выше), а также наличие внешней транзакции из модели программирования System.Transactions
, используя Transaction.Current
собственность.