2016-04-10 8 views
2

私はTransactionScopeをBLLに使用しています。私は自分自身を作成するデータアクセス層上のリポジトリクラスを持っていますContext 1 crud。これは使えますか? BLLでTransactionScopeは異なるコンテキストオブジェクトに対して機能します

:DATAACCESSで

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

:のTransactionScopeの範囲内でインスタンス化され

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

はい。最善の方法は、それをテストすることです。 'updateItem'に例外を投げてみてください。 –

答えて

1

すべてDbContext(括弧)はデフォルトで自動的に、のTransactionScopeの内側のトランザクションに登録されますこれはAmbientトランザクションです。そう、はい、うまくいくはずです。

+0

私は確信していません。それぞれのdbcontextにはおそらく独自の接続があります。つまり、別々のトランザクションを意味します。いくつかのセットアップ(接続プールやその他の理由により)で動作しても、間違いなく保証されますが、[Database.BeginTransaction](https://msdn.microsoft.com/en-us/data/dn456843 .aspx)をEF6で使用したり、旧バージョン用に単一のDbContextを使用することは確実です。 –

関連する問題