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