2010-10-23 3 views
3
 public void SomeMethod1() 
     { 
      using (TemplateEntities ctx = new TemplateEntities()) 
      { 
       //do something in this ctx 
      } 
     } 

     public void SomeMethod2() 
     { 
      using (TemplateEntities ctx = new TemplateEntities()) 
      { 
       //do something else in this ctx 
      } 
     } 

     public void SomeMethod() 
     { 
      using (TemplateEntities ctx = new TemplateEntities()) 
      { 
       using (TransactionScope tran = new TransactionScope()) 
       { 
        SomeMethod1(); 
        SomeMethod2(); 
        var itemToDelete= (from x in ctx.Xxx 
            where x.Id==1 
            select x).Single(); 
        ctx.Xxx.DeleteObject(itemToDelete); 
        ctx.SaveChanges(); 
        tran.Complete(); 
       } 
      } 
     } 

Qu'est-ce qui se passe dans SomeMethod est exécuté dans une transaction même s'il y a plus de contextes? J'utilise POCO.Question sur Entity Framework and Transactions

Répondre

0

Si vous utilisez TransactionScope avec plusieurs instances ObjectContext, la transaction sera promue à une opération répartie et entière (SomeMethod) sera toujours traitée comme atomique. Mais la transaction distribuée nécessite un service NT supplémentaire et ses dépendances. Le service s'appelle Microsoft Distributed Transaction Coordinator (MSDTC). Ce service doit fonctionner sur tous les serveurs concernés (serveur d'applications et serveur de base de données). Dans le service de scénario réseau nécessite une configuration supplémentaire. Pour la communication, les ports RPC doivent être ouverts dans les pare-feu.

+0

Mais si nous parlons de tables avec une base de données c'est correct mon exemple? – gigi

+0

Non, il faudra encore MSDTC. Cependant, lorsque vous gérez votre propre connexion, ce ne sera pas un problème. Voir http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/189b2718-c2b0-4290-8517-3cd3da4314fc pour plus d'informations. –

0

Finalement, la base de données ne connaît pas les contextes de données, donc simplement: les règles de transactions s'appliquent. Étant une transaction sérialisable, des choses comme des verrous de lecture et des verrous de plage de clés seront émis et honorés. Comme toujours, il y a un risque de complication de blocages, mais finalement cela devrait fonctionner. Notez que tous les contextes impliqués doivent s'enrôler comme requis.