我正在尝试将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);
配置看起来相当简单,但我不知道我错过了什么。谢谢你的帮助。