【问题标题】:Fetching Nhibernate Lazy data inside mvc view在 mvc 视图中获取 Nhibernate Lazy 数据
【发布时间】:2012-10-10 17:10:55
【问题描述】:

我想在 mvc 视图中获取惰性数据。
所以我创建了一个ActionFilterAttribute,如下所示。
但由于某种原因,会话在OnActionExecuted 之前关闭。
知道为什么吗?
发送

public class DatabaseTransactionAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            DatabaseConnector.GetTransaction();
        }



        public override void OnActionExecuted(ActionExecutedContext filterContext)
        {
            if(DatabaseConnector.GetCurrentSession().IsActive())
            {
                if(filterContext.Exception == null)
                {
                    DatabaseConnector.GetCurrentSession().Commit();
                }
                else
                {
                    DatabaseConnector.GetCurrentSession().MarkForRollBack();
                }
            }
        }
}

【问题讨论】:

    标签: asp.net-mvc nhibernate session


    【解决方案1】:

    这里的问题是视图是在 OnActionExecuted 方法之后评估的。

    如果您真的想要在视图中延迟加载数据(不建议这样做,因为它会导致您出现 N+1 错误),您将希望在 OnResultExecuted 方法中提交您的事务.

    在执行此操作之前请仔细考虑 - 首选您的原始代码。

    例如

    public class DatabaseTransactionAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            DatabaseConnector.GetTransaction();
        }
    
        public override void OnResultExecuted(ActionExecutedContext filterContext)
        {
            if(DatabaseConnector.GetCurrentSession().IsActive())
            {
                if(filterContext.Exception == null)
                {
                    DatabaseConnector.GetCurrentSession().Commit();
                }
                else
                {
                    DatabaseConnector.GetCurrentSession().MarkForRollBack();
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 2016-08-29
      • 2010-12-25
      相关资源
      最近更新 更多