Одинарная транзакция в нескольких контекстах в Entity Framework 6
У нас есть сценарий для сохранения двух объектов из двух контекстов в одной транзакции.
Шаг 1 - SetTransaction (firstContext, true);
Шаг 2 - Сохраните первый объект, используя firstContext.
Шаг 3 - SetTransaction (secondContext, false);
Шаг 4 - Сохранить второй объект с помощью secondContext
Шаг 5 - наконец, совершите транзакцию.
void function SetTransaction(context, startNewTransaction)
{
var currentContext = firstContext;
if (startNewTransaction)
{
var connection = currentContext.GetConnection();
connection.Open();
this.dbTransaction = connection.BeginTransaction();
}
if (this.dbTransaction != null)
{
currentContext.UseTransaction(dbTransaction);
}
}
Выполняя Шаг 3, currentContext.UseTransaction(dbTransaction); строка выбрасывает исключение как " Прошедшая транзакция не связана с текущим подключением. Можно использовать только транзакции, связанные с текущим соединением"
Пожалуйста, предложите, как решить.
Venkat.
Ответы
Ответ 1
Используйте TransactionScope
. EF автоматически запустится в текущей области транзакции.
Это потребует, чтобы ваши строки подключения идентичны.
using (var scope = new TransactionScope()) {
// Save entity in context A
using (var contextA = new ContextA()) {
contextA.Save(...);
contextA.SaveChanges;
}
// Save entity in context B
using (var contextB = new ContextB()) {
contextB.Save(...);
contextB.SaveChanges;
}
// Commit tx-scope
scope.Complete();
}