Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Single transaction over multiple contexts in Entity Framework 6

Tags:

We have a scenario to save two entities from two contexts in single transaction.

Step 1 - SetTransaction(firstContext, true);

Step 2 - Save first entity using firstContext.

Step 3 - SetTransaction(secondContext, false);

Step 4 - Save second entity using secondContext

Step 5 - finally commit the transaction.

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);    } } 

While executing Step 3, currentContext.UseTransaction(dbTransaction); line throws the exception as "The transaction passed in is not associated with the current connection. Only transactions associated with the current connection may be used"

Please suggest how to resolve.

Venkat.

like image 373
venkat Avatar asked Aug 14 '14 11:08

venkat


1 Answers

Use the TransactionScope. EF will automatically enlist in a running transaction-scope.

It will require that your connectionstrings are identical.

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(); } 
like image 59
Maarten Avatar answered Sep 22 '22 18:09

Maarten