StructureMap / NHibernate Session Per Request包括常量事务

时间:2009-11-29 20:59:20

标签: asp.net-mvc nhibernate structuremap

我刚开始在我的MVC应用程序中使用StructureMap,一切顺利,除了以正确的方式处理我的ITranscation

我想要做的是在每个请求上创建一个新的ISession。与此同时,我想开始一个交易。

在请求结束时,我将提交转账。

我的问题是,如何使用StructureMap以最佳方式完成此操作。我在谷歌上发现了很多例子,但没有一个人开始对请求进行交易,我真的不想在我的方法中这样做。

提前致谢!

2 个答案:

答案 0 :(得分:3)

答案 1 :(得分:1)

这可能不是那么容易,但这是我的看法。创建一个基本上包装会话和事务的工作单元,并将其存储为请求,并在请求结束时提交或回滚。

public interface IUnitOfWork : IDisposable
{
    ISession Session { get; }
    void Commit();
    void Rollback();
}

实施可能如下:

public class UnitOfWork : IUnitOfWork
{
    private readonly ITransaction _tx;
    public ISessionFactory SessionFactory { get; set; }

    public UnitOfWork()
    {
        SessionFactory = ObjectFactory.GetNamedInstance<ISessionFactory>(Keys.SessionFactoryName);
        Session = SessionFactory.OpenSession();
        _tx = Session.BeginTransaction();
    }

    public UnitOfWork(ISessionFactory sessionFactory)
    {
        SessionFactory = sessionFactory;
        Session = SessionFactory.OpenSession();
        _tx = Session.BeginTransaction();
    }

    public ISession Session { get; private set; }

    public void Commit()
    {
        if (_tx.IsActive)
            _tx.Commit();
    }

    public void Rollback()
    {
        _tx.Rollback();
    }
}

只需在最终请求处理工作单元。