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 类,但我无法理解它是如何工作的。

我一直在研究使用entities.Connection.BeginTransaction()但返回 aDbTransaction并且TransactionScope只接受类型TransactionClass

任何可以以正确方式指出我的帮助或指示都会真正有帮助。

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 回答