2012-12-11 118 views
0

我需要訪問我的OnActionFilterExecuting方法中的當前數據庫上下文,該方法接收ActionExecutingContext參數(filterContext)。有人可以告訴我如何從ActionFilterAttribute方法訪問DbContext

我可以在調試時在本地堆棧中看到它,但我不知道如何訪問它。

我曾嘗試:

  1. filterContext.Controller.db
  2. filterContext.Controller(ftvcdl.Controllers.PartController).db

這裏是我的調試跟蹤:http://i.imgur.com/P7zu5.png

PS:我是新來的C#,所以我不完全理解語法或如何閱讀調試堆棧,雖然我正在學習!

回答

0

您需要將控制器投的東西,提供給DB訪問,例如:

var db = ((PartController)filterContext.Controller).DB; 

但是,如果您使用屬性的東西,是不是PartController你會得到問題(或其中的方法)。您也許可以通過使用基本類型或接口而不是PartController來改善它。

另一種方法是使用HTTP上下文來傳達DB:

var db = (SomeDbType)filterContext.HttpContext.Items["db"] 

和東西分貝到當您創建它(和同樣在HTTP的情況下,確保在處置它請求結束)

最後,您可以在屬性中擁有單獨的DB上下文;連接池意味着這可能不成問題:

using(var db = SomeUtilityType.GetDb()) { 
    ... 
} 
+0

非常感謝!你的第一個建議現在可以完成。我也必須將db從private改爲public,所以它在類中不受保護。 –

相關問題