2015-11-16 3 views
2

Я знаю EF 6 DbContextTransaction, но у меня плохой опыт работы с ней вложенной транзакцией.Как создать вложенные транзакции в Entity Framework с помощью TransactionScope?

Теперь я пытаюсь использовать TransactionScope только для вложенных транзакций, но также имеет проблемы.

Этот код включает 3 изменения таблиц.

Когда во внутреннем trx dbTrx2 возникло исключение, он перепутал dbTrx1, поскольку dataChg3.SaveChanges() не удался.

using (var dbTrx1 = new System.Transactions.TransactionScope()) 
{ 
    ... 
    dataChg1..... 

    foreach(var dataChg2 in listOfDataChg2) 
    { 
     ... 
     try 
     { 
      using (var dbTrx2 = new System.Transactions.TransactionScope()) 
      { 
       ... 
       dbTrx2.Complete(); 
      } 
     } 
     catch(Exception ex) 
     { 
      ... 
      // when ex occured in dbTrx2, it messed up dbTrx1 
     } 
     ... 
    } 

    dataChg3.SaveChanges(); // <- error - The operation is not valid for the state of the transaction 
    ... 
    dbTrx1.Complete(); 
} 

Кто-нибудь когда-либо тренировал надлежащую вложенную транзакцию с использованием структуры сущностей?

ответ

0

В настоящее время EF6 не может правильно обрабатывать вложенные транзакции.

Мое обходное решение, основное для удовлетворения моей потребности: - когда исключение произошло во вложенной транзакции, неправильные изменения данных не повлияют на/save-fort на следующий SaveChanges() invoke.

https://social.microsoft.com/Forums/en-US/4d359652-d3ff-4127-bb94-c7bd40ba58c7/entity-framework-6-partially-using-transactionscope?forum=adodotnetentityframework