Поддержка транзакций
LINQ to SQL поддерживает три модели отдельных транзакций. Далее представлен список этих моделей в порядке выполненных проверок.
Явные локальные транзакции
При вызове SubmitChanges, если свойству Transaction задана транзакция (IDbTransaction
), вызов SubmitChanges выполняется в контексте этой же транзакции.
Вашей обязанностью является выполнение фиксации или отката транзакции после ее успешного выполнения. Подключение, соответствующее транзакции, должно совпадать с подключением, используемым для создания DataContext. При использовании разных подключений создается исключение.
Явные распределяемые транзакции
Вы можете вызывать API-интерфейсы LINQ to SQL (включая, но не ограниченныеSubmitChanges) в область активногоTransaction. LINQ to SQL обнаруживает, что вызов находится в область транзакции и не создает новую транзакцию. LINQ to SQL также избегает закрытия подключения в этом случае. В контексте данной транзакции можно осуществить запрос и выполнения SubmitChanges.
Неявные транзакции
При вызове SubmitChangesLINQ to SQL проверка, чтобы узнать, находится ли вызов в область объекта или Transaction Transaction
если для свойства (IDbTransaction
) задана локальная транзакция, запущенная пользователем. Если он не находит ни транзакцию, LINQ to SQL запускает локальную транзакцию (IDbTransaction
) и использует ее для выполнения созданных команд SQL. После успешного завершения всех команд SQL LINQ to SQL фиксирует локальную транзакцию и возвращает.