StructureMap / NHibernate Session Per Request包括常量事务
-
08-07-2019 - |
题
我刚开始在我的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();
}
}
只需在最终请求处理工作单元。
不隶属于 StackOverflow