在mvc视图中获取Nhibernate Lazy数据

时间:2012-10-20 04:21:24

标签: asp.net-mvc nhibernate session

我想在mvc视图中获取延迟数据 所以我创建了一个ActionFilterAttribute,如下所示 但由于某种原因,会话在OnActionExecuted之前结束 任何想法为什么?
TX

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

1 个答案:

答案 0 :(得分: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();
            }
        }
    }
}