有人可以告诉我如何从ActionFilterAttribute方法访问DbContext

时间:2012-12-11 11:59:44

标签: c# debugging model-view-controller

我需要在我的OnActionFilterExecuting方法中访问当前的db上下文,该方法接收ActionExecutingContext参数(filterContext)。

我可以在调试时在我的本地堆栈中看到它,但我不知道如何访问它。

我试过了:

  1. filterContext.Controller.db
  2. filterContext.Controller(ftvcdl.Controllers.PartController).db
  3. 这是我的调试跟踪:http://i.imgur.com/P7zu5.png

    PS:我是C#的新手所以我不完全理解语法或如何很好地阅读调试堆栈,虽然我正在学习!

1 个答案:

答案 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()) {
     ...
}