我需要在我的OnActionFilterExecuting
方法中访问当前的db上下文,该方法接收ActionExecutingContext
参数(filterContext)。
我可以在调试时在我的本地堆栈中看到它,但我不知道如何访问它。
我试过了:
filterContext.Controller.db
filterContext.Controller(ftvcdl.Controllers.PartController).db
这是我的调试跟踪:http://i.imgur.com/P7zu5.png
PS:我是C#的新手所以我不完全理解语法或如何很好地阅读调试堆栈,虽然我正在学习!
答案 0 :(得分:0)
您需要将控制器转换为提供对DB的访问权限的内容,例如:
var db = ((PartController)filterContext.Controller).DB;
但是,如果您对非PartController
(或其中的方法)的内容使用该属性,则会出现问题。您可以使用基本类型或界面而不是PartController
来改进它。
另一种方法是使用http-context传达DB:
var db = (SomeDbType)filterContext.HttpContext.Items["db"]
并在创建它时将db填充到http-context中(同样,请确保在请求结束时将其置于其中)
最后,你可以在属性中有一个单独的DB上下文;连接池意味着这可能不是问题:
using(var db = SomeUtilityType.GetDb()) {
...
}