2012-12-11 81 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,所以它在类中不受保护。 –

相关问题