我刚开始在我的MVC应用程序中使用StructureMap,一切都很顺利,除了正确处理我的 ITranscation 之外。

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

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

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

提前致谢!

其他提示

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

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();
    }
}

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top