Single transaction over multiple contexts in Entity Framework 6

c# entity-framework-6

Question

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.

1
20
8/14/2014 12:00:50 PM

Popular Answer

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();
}
32
5/5/2016 7:01:59 AM


Related Questions





Related

Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow