0

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

  • 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);
        }
    }

感谢您的任何建议!

4

1 回答 1

0

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

从 Ninject.Web.Common 3.2.0.0升级到

3.2.3.0

和应用程序工作。将检查库中已更改的内容。

于 2017-02-22T10:38:34.870 回答