TransactionScope по сравнению с транзакцией в LINQ к SQL

Вы должны изменить свою конфигурацию бегуна на gitlab на , увеличить размер shm

Например: shm_size = 300000

76
задан abatishchev 8 November 2010 в 17:22
поделиться

3 ответа

Linq2SQL будет использовать неявную транзакцию. Если все Ваши обновления сделаны в рамках сингла, Отправляют, Вы, возможно, не должны обрабатывать транзакцию сами.

Из документации (шахта акцента):

, Когда Вы называете SubmitChanges, LINQ к проверкам SQL, чтобы видеть, является ли вызов в пределах Транзакции или если свойство Transaction (IDbTransaction) установлено на запущенную пользователями локальную транзакцию. , Если это не находит никакую транзакцию, LINQ к SQL запускает локальную транзакцию (IDbTransaction) и использует его для выполнения сгенерированных команд SQL. , Когда все команды SQL были успешно завершены, LINQ к SQL фиксирует локальную транзакцию и возвраты.

35
ответ дан casperOne 24 November 2019 в 11:17
поделиться

Нужно отметить, что при использовании TransactionScope нет никакой потребности в эти try/catch конструкция, которую Вы имеете. Просто необходимо звонить Complete на объеме для фиксации транзакции, когда из объема выходят.

Однако TransactionScope обычно лучший выбор, потому что он позволяет Вам вызовам вложенного множества к другим методам, которые могли бы потребовать транзакции без Вас имеющий необходимость раздать состояние транзакции.

При вызове BeginTransaction на DbConnection объект, необходимо раздать тот объект транзакции, если Вы хотите выполнить другие операции в той же транзакции, но в другом методе.

С TransactionScope, пока объем существует, он обработает все, что регистрируется в токе Transaction на потоке, делая Ваш инструмент для очистки кода, и более удобный в сопровождении.

Вдобавок ко всему, Вы обладаете дополнительным преимуществом способности использовать другие ресурсы, которые могут участвовать в транзакциях, не только соединении с базой данных.

нужно отметить, что в ситуациях, где необходимо сжать большинство из соединений и операций базы данных, Вы не могли бы хотеть использовать TransactionScope; даже против единой базы данных, Вы выполняете возможность используемого Distributed Transaction Coordinator и имеющий транзакцию, превращаемую в распределенную транзакцию (даже для соединения единой базы данных).

В этих случаях, при измазывании дизайна, Вы могли бы хотеть рассмотреть раздавание определенной для соединения транзакции.

Или , если Вы знаете, Вы будете последовательно использовать один ресурс (и на том же потоке), Вы могли бы хотеть создать класс это подсчеты ссылок Ваше соединение/транзакция.

Вы создали бы класс, что на конструкции, создает Ваш ресурс/инкременты количество. Это также реализовало бы IDisposable (в котором Вы будете постепенно уменьшаться/выпускать/фиксировать/прерывать, когда количество будет нулем), и сохраните количество в переменной, которая имеет ThreadStaticAttribute , относился к нему.

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

76
ответ дан casperOne 24 November 2019 в 11:17
поделиться

Я полагаю, что они - существенно то же, с которым класс TransactionScope соединит интерфейсом с ADO.NET, лежащим в основе соединения, чтобы создать и или фиксировать или откатывать транзакцию. То, что класс TransactionScope был просто создан для создания работы с инструментом для очистки персистентности ADO.NET.

Редактирование: Разъяснение моего оператора относительно дополнение casperOne это - TransactionScope, который создаст транзакцию, и соединение будет затем видеть транзакцию, которая была создана TransactionScope, и используйте его, так как это доступно ему.

4
ответ дан Community 24 November 2019 в 11:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: