Создать TransactionScope и порядок создания контекста - PullRequest
0 голосов
/ 05 мая 2018

В чем разница этих кодов:

using (TransactionScope tran = new TransactionScope ())
{
     using (Entities ent = new Entities())
     {

и

using (Entities ent = new Entities())
{
    using (TransactionScope tran = new TransactionScope ())
    {

Имеет ли значение порядок строк?

Спасибо

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

Да, порядок имеет значение. Или, скорее, мы не можем сказать, что это не имеет значения, не глядя на ваш код.

Экземпляры DbConnection будут присутствовать в транзакции окружения, если они существуют, когда они открыты () ed.

Ваш конструктор DbContext может открыть базовый DbConnection, в этом случае два шаблона различаются.

Первый - это нормальный паттерн, и вы должны придерживаться этого.

Также, если вы используете SQL Server, не используйте конструктор по умолчанию TransactionScope. См. Использование нового TransactionScope () Считается вредным

0 голосов
/ 05 мая 2018

В этом случае это не имеет значения, поскольку Entities выглядит как класс Model / Data, который не может / не должен участвовать в транзакции, поэтому вы можете иметь любой заказ, это не будет создавать разницу. Теперь, если есть какая-либо проблема в операции Entities, чтение / DML, тогда транзакция также будет прервана, предполагая, что операция происходит в контексте внешней транзакции, хотя класс / объект, выполняющий ее как IDBConnection, в любом случае автоматически зачисляется в транзакцию. (если не установлено значение false), однако даже если соединение создается вне контекста транзакции, оно не будет автоматически подключаться, требуется явное зачисление для контекста транзакции

Короче

Для вашего текущего кода это не имеет значения, пока вы не имеете дело с объектом, который нуждается в зачислении транзакции, например IDBConnection. Из двух фрагментов кода, хотя мои предпочтения были бы первыми, когда все окружающие транзакции охватывают все объекты, которые должны быть включены автоматически, мы не оставляем никаких объектов случайно.

Важная разница

Что вы, возможно, захотите быть осторожным относительно того, хотите ли вы получить доступ к сущностям вне контекста транзакции, так как это невозможно в варианте 1, но не будет проблемой в варианте 2

...