NHibernate / NInject - 用户提交表单后不会立即执行更新

时间:2017-02-17 05:03:44

标签: asp.net-mvc nhibernate ninject ninject.web.mvc session-per-request

我在一个使用以下框架的项目

  • ASP.NET MVC4
  • NHibernate as 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);
        }
    }

感谢您的任何建议!

1 个答案:

答案 0 :(得分:0)

对我们在添加更多日志的一些调查后实施的代码充满信心。然后我们检测到 Ninject.Web.Common

的新版本

从Ninject.Web.Common 3.2.0.0 升级至

  

<强> 3.2.3.0

和申请工作。将检查lib中已更改的内容。