首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Castle AutoTx工具和NHibernate工具的事务

使用Castle AutoTx工具和NHibernate工具的事务
EN

Stack Overflow用户
提问于 2011-12-12 04:34:07
回答 1查看 2.6K关注 0票数 3

我正在尝试通过AutoTx工具使用Castle NHibernate Facility。作为测试,我在服务过程中抛出了一个异常,以确保事务被回滚。但是,数据仍然保存在数据库中。

我的服务接口,使用TransactionAttribute的IActivityService

代码语言:javascript
运行
复制
public interface IActivityService
{
    [Transaction]
    Activity CreateActivity(Activity activity);
}

CreateActivity的实现。我在这里抛出一个异常,期望回滚添加到AddActivity中的数据:

代码语言:javascript
运行
复制
public virtual Activity CreateActivity(Activity activity)
{
    activityDAO.AddActivity(activity);
    throw new Exception("This should rollback the transaction");
    return activity;
}

AddActivity的实现。SessionManager是一个注入的ISessionManager

代码语言:javascript
运行
复制
public void AddActivity(Activity activity)
{
    using (ISession session = SessionManager.OpenSession())
    {
        session.Save(activity);
    }
}

最后,下面是我如何配置windsor容器。NHibernateInstaller直接来自the guide,我流利的nhibernate配置被换进来了:

代码语言:javascript
运行
复制
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);

配置看起来相当简单,但是我不知道我遗漏了什么。谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-15 09:53:46

您没有显示服务实现类的类声明代码,因此您可能已经这样做了,但是如果您想要声明性事务,则需要用[Transactional]属性注释transaction类。

代码语言:javascript
运行
复制
[Transactional]    
public class ActivityServiceImpl {

    [Transaction]
    public Activity CreateActivity(Activity activity) {
        // ... implementation here
    }
}

如果在实现类上不包括事务性属性,则AutoTx工具不知道为该类创建包装器。

我倾向于将[Transaction]属性放在实现方法上,而不是放在接口定义中。我不知道注释接口方法声明是否有效。

还有一件事你可能需要尝试一下。我注意到,在配置容器时,您首先安装,然后添加AutoTx工具。我认为你应该在调用你的安装程序之前先添加工具。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8467246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档