- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 Castle NHibernate Facility使用 AutoTx 工具。作为测试,我在服务中抛出一个异常,以确保事务被回滚。但是,数据仍然保存在数据库中。
我的服务接口(interface) 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
是一个注入(inject)的 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);
配置看起来相当简单,但我不知道我遗漏了什么。感谢您的帮助。
最佳答案
您没有显示服务实现类的类声明代码,因此您可能已经这样做了,但是如果您想要声明式事务,则需要使用 [Transactional]
注释事务类> 属性。
[Transactional]
public class ActivityServiceImpl {
[Transaction]
public Activity CreateActivity(Activity activity) {
// ... implementation here
}
}
如果您不在实现类中包含 [Transactional] 属性,AutoTx 工具将不知道为该类创建包装器。
我倾向于将[Transaction]
属性放在实现方法上,而不是放在接口(interface)定义中。不知道对接口(interface)方法声明进行注解是否有效。
您可能还需要尝试一件事。我注意到当您配置容器时,您首先安装,然后添加 AutoTx 工具。我认为您应该在调用安装程序之前先添加这些设施。
关于.net - 使用 CaSTLe AutoTx Facility 和 NHibernate Facility 的交易,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8467246/
我正在尝试使用 NHibernate 和 CaSTLe.Facilities.AutoTx 配置 CaSTLe Windsor,但我不断遇到 PerTransactionLifeStyleOption
我正在尝试使用 Castle NHibernate Facility使用 AutoTx 工具。作为测试,我在服务中抛出一个异常,以确保事务被回滚。但是,数据仍然保存在数据库中。 我的服务接口(inte
我是一名优秀的程序员,十分优秀!