我正在尝试将Castle NHibernate工具与AutoTx工具一起使用。 作为测试,我在服务中间抛出异常,以确保事务回滚。 但是,数据仍然存在于数据库中。
我的服务接口, IActivityService
使用TransactionAttribute:
public interface IActivityService
{
[Transaction]
Activity CreateActivity(Activity activity);
}
CreateActivity
的实现。 我在这里抛出一个异常,期望在AddActivity
添加的数据被回滚:
public virtual Activity CreateActivity(Activity activity)
{
activityDAO.AddActivity(activity);
throw new Exception("This should rollback the transaction");
return activity;
}
AddActivity
实现。 SessionManager
是一个注入的ISessionManager
。
public void AddActivity(Activity activity)
{
using (ISession session = SessionManager.OpenSession())
{
session.Save(activity);
}
}
最后,这是我如何配置windsor容器。 NHibernateInstaller
直接来自指南 ,我的流畅的nhibernate配置交换:
container = new WindsorContainer().Install(FromAssembly.This());
// set up ISessionManager injection for DAOs
container
.AddFacility<AutoTxFacility>()
.Register(Component
.For<INHibernateInstaller>()
.ImplementedBy<NHibernateInstaller>()
.LifeStyle.Singleton)
.AddFacility<NHibernateFacility>(f =>
f.DefaultLifeStyle = DefaultSessionLifeStyleOption.SessionPerWebRequest);
配置似乎相当简单,但我无法弄清楚我错过了什么。 谢谢你的帮助。