2012-12-11 4 views
0

매개 변수 (filterContext)를받는 OnActionFilterExecuting 메서드에서 현재 db 컨텍스트에 액세스해야합니다.누군가가 ActionFilterAttribute 메서드에서 DbContext에 액세스하는 방법을 말해 줄 수 있습니까

디버깅하는 동안 내 로컬 스택에서 볼 수 있지만 액세스하는 방법을 모르겠습니다.

나는 시도했다 : http://i.imgur.com/P7zu5.png

추신 : 나는 C# 그래서 난 완전히 이해하지 않는 새로운 오전

  1. filterContext.Controller.db
  2. 다음
  3. filterContext.Controller(ftvcdl.Controllers.PartController).db

내 디버그 추적입니다 문법이나 디버그 스택을 잘 읽는 방법, 배우고 있지만!

답변

0

당신은 예를 들어, DB에 대한 액세스를 제공 뭔가 컨트롤러를 캐스팅해야합니다 : 당신이 PartController 아닌 무언가의 속성을 사용할 경우

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

, 당신은 문제를 얻을 것이다 (또는 거기에 방법). PartController 대신 기본 유형 또는 인터페이스를 사용하여이를 향상시킬 수 있습니다.

또 다른 방법은 DB 전달하기 위해 HTTP 컨텍스트를 사용하는 것입니다 :

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

을 당신이 그것을 (만들고 동일하게 HTTP 컨텍스트에 DB를 물건, 때를 폐기해야합니다 요청 종료)

마지막으로 속성에 별도의 DB 컨텍스트가있을 수 있습니다. 연결 풀링은 문제가되지 않을 수도 있음을 의미합니다.

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

정말 고마워요! 귀하의 첫 번째 제안은 당분간 할 것입니다. 또한 db를 private에서 public으로 변경해야 클래스 내부에서 보호되지 않습니다. –

관련 문제