Asp.net mvc 每个请求的StructureMap/NHibernate会话,包括常量转换
我刚开始在我的MVC应用程序中使用StructureMap,除了以正确的方式处理我的Asp.net mvc 每个请求的StructureMap/NHibernate会话,包括常量转换,asp.net-mvc,nhibernate,structuremap,Asp.net Mvc,Nhibernate,Structuremap,我刚开始在我的MVC应用程序中使用StructureMap,除了以正确的方式处理我的iTransation外,一切都很顺利 我想做的是在每个请求上创建一个新的ISession。与此同时,我想开始一个转换 在请求结束时,我将提交转换 我的问题是,如何使用StructureMap以最佳方式实现这一点。我在Google上找到了很多例子,但是没有一个是通过请求开始转换的,我真的不想在我的方法中这样做 提前谢谢 可能没那么容易,但这是我的看法。创建一个基本上包装会话和事务的工作单元,并将其存储在请求中,然
iTransation
外,一切都很顺利
我想做的是在每个请求上创建一个新的ISession。与此同时,我想开始一个转换
在请求结束时,我将提交转换
我的问题是,如何使用StructureMap以最佳方式实现这一点。我在Google上找到了很多例子,但是没有一个是通过请求开始转换的,我真的不想在我的方法中这样做
提前谢谢 可能没那么容易,但这是我的看法。创建一个基本上包装会话和事务的工作单元,并将其存储在请求中,然后在请求结束时提交或回滚
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();
}
}
公共类UnitOfWork:IUnitOfWork
{
专用只读ITransaction_tx;
公共ISessionFactory会话工厂{get;set;}
公共工作单元()
{
SessionFactory=ObjectFactory.GetNamedInstance(Keys.SessionFactoryName);
Session=SessionFactory.OpenSession();
_tx=Session.BeginTransaction();
}
公共工作单元(ISessionFactory sessionFactory)
{
SessionFactory=SessionFactory;
Session=SessionFactory.OpenSession();
_tx=Session.BeginTransaction();
}
公共ISession会话{get;private set;}
公共无效提交()
{
如果(_tx.IsActive)
_tx.Commit();
}
公共无效回滚()
{
_tx.回滚();
}
}
只需按endrequest处理工作单元。这两篇文章应该会有所帮助
这正是我需要的,谢谢!然后我是否应该在IHttpModule中调用Commit()并在EndRequest上进行dispose?是的,但不要在提交事务后尝试处理它(它在提交后进行处理)。只是工作单元。第二个链接看起来很有趣。我会再打给你的。谢谢你。这是一篇很棒的帖子!:)