NHibernate/NInject - 更新不会在用户提交表单后立即执行
NHibernate/NInject - Update is not executed right after user submit a form
我在一个使用以下框架的项目中
- ASP.NET MVC4
- 作为 ORM 的 NHibernate
- NInject 作为一个 IoC 来管理依赖和做 DI
问题是用户更新实体并提交表单后,他必须等待大约 20 秒才能加载正确的数据。同样这次更改被保存到数据库中(SQL 服务器)
我们在 RequestScope 中管理了 NHibernate ISession 对象,但发现当 MVC 从编辑重定向到列表屏幕时,停用方法没有调用。
下面是 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);
}
}
感谢任何建议!
在添加更多日志的一些调查之后,我们对我们实施的代码充满信心。然后我们检测到有新版本 Ninject.Web.Common
从 Ninject.Web.Common 3.2.0.0 升级到
3.2.3.0
并且应用程序有效。将检查库中已更改的内容。
我在一个使用以下框架的项目中
- ASP.NET MVC4
- 作为 ORM 的 NHibernate
- NInject 作为一个 IoC 来管理依赖和做 DI
问题是用户更新实体并提交表单后,他必须等待大约 20 秒才能加载正确的数据。同样这次更改被保存到数据库中(SQL 服务器)
我们在 RequestScope 中管理了 NHibernate ISession 对象,但发现当 MVC 从编辑重定向到列表屏幕时,停用方法没有调用。
下面是 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);
}
}
感谢任何建议!
在添加更多日志的一些调查之后,我们对我们实施的代码充满信心。然后我们检测到有新版本 Ninject.Web.Common
从 Ninject.Web.Common 3.2.0.0 升级到
3.2.3.0
并且应用程序有效。将检查库中已更改的内容。