2012-10-20 42 views
1

我想在mvc視圖內抓取懶惰的數據。
所以我創建了一個ActionFilterAttribute,如下圖所示。
但由於某種原因,會議在OnActionExecuted之前關閉。
任何想法爲什麼?
的Tx抓取Nhibernate mvc視圖內部的懶惰數據

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

這裏的問題是,該觀點是的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(); 
      } 
     } 
    } 
}