1

データレイヤーに次の設定があります

namespace DAL
{
    public abstract class BaseDalObj:IDisposable
    {
        protected Auto.Entities entities;
        public BaseDalObj()
        {
            entities= new Auto.Entities();
        }
        public void Dispose()
        {
        }
    }
    public class Class1: BaseDalObj
    {
        public void Save(object a)
        {
            entities.SaveItem(a);
        }
    }

    public class Class2: BaseDalObj
    {
        public void Save(object b)
        {
            entities.SaveItem(b);
        }
    }
}
namespace Business
{
    public class BusinessLL
    {
        public Object a,b;
        public BusinessDAL()
        {
            a = new Object();
            b = new Object();
        }

        public void Save()
        {
                using(var dbObj1 = new DAL.Class1())
                {
                    dbObj1.Save(a);
                    using(var dbObj2 = new DAL.Class2())
                    {
                        dbObj2.Save(b);
                    }
                }
        }
    }
}

私が欲しいのは、同じTransactionScope内で両方のSave関数を呼び出す方法です。

EFを使用してこれを行う方法がわかりません。TransactionScopeクラスの使用を検討しましたが、その動作を理解できません。

私は使用を検討してきましたが、それはaをentities.Connection.BeginTransaction()返し、型クラスのみを受け入れますDbTransactionTransactionScopeTransaction

私を正しい方向に向けることができるどんな助けや指針も本当に助けになるでしょう。

4

1 に答える 1

2

接続を開くときにアンビエントトランザクションが存在する場合、接続は自動的にこのトランザクションに参加します。これはObjectContextにも当てはまります。ObjectContext.SaveChangesを呼び出すと、接続がアンビエントトランザクションに自動的に参加します。したがって、これはうまくいくはずだと思います。

using(var transaction = new TransactionScope)
{
   using(var class1 = new Class1())
   {
       class1.Save(x);
   }

   using(var class2 = new Class2())
   {
       class2.Save(y);
   }

   transaction.Complete();
}
于 2012-04-24T14:07:51.950 に答える