Базы данных / Внезапно dotNET / Databases / Microsoft
Продолжаю тему, начатую ранее про дырявые абстракции и TransactionScope. Сегодня ещё одна короткая заметка из категории “Внезапно” и снова про уровни изоляции.
Знаете ли вы, какой будет уровень изоляции, когда вы откроете соединение (для определённости — SqlConnection)? Вопрос с подвохом. Правильный ответ, как обычно — It depends.
Дело в том, что, чаще всего, вы используете connection pool. А он, при возврате в пул и извлечении из него соединения не меняет уровень изоляции. На эту тему есть статья (KB 972915), которая говорит что это “by desing”.
Что тут можно сказать — будьте бдительны :) В принципе, если у вас всегда один уровень изоляции, вы в относительной безопасности. А чаще всего так и бывает — мало кто задумывается об уровнях изоляции, отличных от дефолтных. А вот если уровней может быть несколько — лучше их указывать явно всегда (одним из способов, перечисленных в KB).
Из забавного. В MSSQL 2014 это поведение починили, но потом спохватились и назвали такое изменение поведения ошибкой.
Базы данных / Внезапно dotNET / Databases / Microsoft