1

我想在 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();
                }
            }
        }
}
4

1 回答 1

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();
            }
        }
    }
}
于 2012-10-20T12:25:31.593 回答