我在一个使用以下框架的项目中
- ASP.NET MVC4
- NHibernate 作为 ORM
- NInject 作为 IoC 来管理依赖项并执行 DI
问题是用户更新实体并提交表单后,他必须等待大约 20 秒才能加载正确的数据。这次也将更改保存到数据库(SQL Server)中
我们在 RequestScope 中管理了 NHibernate ISession 对象,但发现当 MVC 从编辑重定向到列表屏幕时,没有调用 Deactivation 方法。
下面是 NHibernate 的 NInject 模块的主要部分:
加载方法:
Bind<ISession>()
.ToMethod(c => c.Kernel.Get<ISessionFactory>().OpenSession(interceptor))
.InRequestScope()
.OnActivation(SetupSession())
.OnDeactivation(CommitOrRollback)
private Action<ISession> SetupSession()
{
_logger.Debug("OnActivation");
return s =>
{
s.BeginTransaction(IsolationLevel.ReadCommitted);
s.FlushMode = FlushMode.Commit;
};
}
private void CommitOrRollback(ISession session)
{
_logger.Debug("OnDeactivation");
if (!session.Transaction.IsActive)
{
return;
}
try
{
session.Transaction.Commit();
session.Flush();
_logger.Debug("Session committed successfully");
}
catch (Exception ex)
{
session.Transaction.Rollback();
throw new CommitDataException(ex);
}
}
感谢您的任何建议!