我正在玩新的(有点新的)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,一切仅用于示例目的)