Castle Transaction facility继承问题

时间:2015-03-22 06:39:58

标签: nhibernate transactions castle

我正在玩新的(有点新的)Castle.Nhibernate.Facility with new Castle.Transactions 3.X.我正在考虑从旧的Castle.NhibernateIntegration升级到AutoTx工具(2.x)

但是交易在继承的类中没有按预期工作。

我有以下课程:

公共类BaseDao     {         protected ISessionManager SessionManager {get;私人集; }

    public BaseDao(ISessionManager sessionManager)
    {
        SessionManager = sessionManager;
    }

    [Transaction(TransactionScopeOption.Required)]
    public virtual void Update(object item)
    {
        //NO TRANSACTION HERE !!!!!!
        using (ISession session = SessionManager.OpenSession())
        {
         session.Update(item);   
        }
    }
}

和交易孩子:

当我创建一些具体的dao时:

public class TestDao : BaseDao
{
    public TestDao(ISessionManager sessionManager)
        : base(sessionManager)
    {
    }

    [Transaction(TransactionScopeOption.Required)]
    public virtual void SaveCar(Car car)
    {
        using (var session = SessionManager.OpenSession())
        {
            session.SaveOrUpdate(car); //HERE transaction works
        }
    }      
}

现在我有以下部分代码:

           Car car = new Car
        {
            CarName = "Test",
            CustomerName = "Test",
        };

        var dao = container.Resolve<TestDao>();

        dao.SaveCar(car);//HERE it works

        car.CarName = "UpdatedName";

        dao.Update(car);//HERE it DONT WORK

我注意到在update方法中没有事务(由transactionManager.Count验证== 0

有没有办法如何将 Transaction 属性继承到NhibernateDao中的被调用方法。在Castle.Transaction 2.XX中,有 Transactional 属性,一切都按预期工作。

请注意,此代码并不完美(如不需要TransactionScope,不存在containerRegistration,一切仅用于示例目的)

0 个答案:

没有答案