2016-04-10 22 views
2

BLL'de TransactionScope kullanıyorum. Veri erişim katmanında, her hamla için kendi Context'u oluşturan depo sınıflarım var. Bu işe yarayacak mı? BLL'dekiTransactionScope farklı Bağlam nesnesinde çalışıyor mu?

: DataAccess yılında

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

:

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

Evet. En iyi yol test etmektir. UpdateItem'de bir istisna atmaya çalışın ve bakın. –

cevap

1

Tüm DBContext kapsam içine başlatılan bir TransactionScope ait (parantez) otomatik varsayılan olarak TransactionScope iç işlemde öğrenci alınacaktır Ortam işlemi. Yani evet işe yaramalı.

+0

Çok emin değilim, çünkü her dbcontext muhtemelen kendi bağlantılarına sahip olacak, bu da ayrı işlemler anlamına geliyor. Bazı kurulumlarda (bağlantı havuzu nedeniyle veya başka bir nedenden dolayı) çalışsa bile, şüphesiz [Database.BeginTransaction] (https://msdn.microsoft.com/en-us/data/dn456843) .aspx) EF6'da veya erken sürümler için tek bir DbContext kullanmak emin bir yoldur. –

İlgili konular