【发布时间】:2011-12-11 20:34:07
【问题描述】:
我正在尝试将 Castle NHibernate Facility 与 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 直接来自 the guide,我的流畅的 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);
配置看起来相当简单,但我不知道我缺少什么。感谢您的帮助。
【问题讨论】:
标签: .net nhibernate transactions castle-windsor windsor-nhfacility