2016-04-10 9 views
2

Ich verwende TransactionScope in BLL. Ich habe Repository-Klassen auf Datenzugriffsebene, die eigene Context pro Crud erstellt. Ob das funktioniert?Funktioniert TransactionScope für verschiedene Context-Objekt

In Bll:

using (var scope = new TransactionScope(TransactionScopeOption.Required)) 
    { 
     rep.addItme(Myentity); 
     rep.updateItme(MyAnotherEntity); 
      scope.Complete(); 
    } 

In Data Access:

class rep 
{ 
    void addItmem(Entity entity) 
    { 
    using(var context=new MydbContext) 
    { 
    //---state is set here 
    context.Entity.add(entity); 
    context.SaveChanges(); 
    } 

    } 
    void updateItem(Entity entity) 
{ 
using(var context=new MydbContext) 
    { 
    //--state is set here 
    context.Entity.add(entity); 
     context.SaveChanges(); 
    } 
} 
+0

Ja. Der beste Weg ist es, es zu testen. Versuchen Sie, eine Ausnahme in 'updateItem' zu werfen und zu sehen. –

Antwort

1

Alle DbContext, die in dem Geltungsbereich (Klammern) eine Transaction instanziiert wird automatisch in der inneren Transaktion Transactioneingeschrieben werden, die standardmäßig es ist die Ambient-Transaktion. Also ja, es sollte funktionieren.

+0

Ich bin nicht so sicher, weil jeder dbcontext wahrscheinlich eine eigene Verbindung haben wird, das heißt getrennte Transaktionen. Auch wenn es in einigen Setups funktioniert (aufgrund des Verbindungspools oder aus einem anderen Grund), ist es zweifelhaft, dies zu tun, während [Database.BeginTransaction] (https://msdn.microsoft.com/en-us/data/dn456843 .aspx) in EF6 oder mit einem einzigen DbContext für frühe Versionen ist ein sicherer Weg. –

Verwandte Themen