我在一个使用以下框架的项目
问题是,在用户更新实体并提交表单后,他必须等待大约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);
}
}
感谢您的任何建议!
答案 0 :(得分:0)
对我们在添加更多日志的一些调查后实施的代码充满信心。然后我们检测到 Ninject.Web.Common
的新版本从Ninject.Web.Common 3.2.0.0 升级至
<强> 3.2.3.0 强>
和申请工作。将检查lib中已更改的内容。