0

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

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

我努力了:

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

这是我的调试跟踪:http: //i.imgur.com/P7zu5.png

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

4

1 回答 1

0

您需要将控制器转换为提供对数据库的访问权限的东西,例如:

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

PartController但是,如果您在不是(或其中的方法)的东西上使用该属性,您将遇到问题。您也许可以通过使用基本类型或接口而不是PartController.

另一种方法是使用 http-context 来传达数据库:

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

并在创建数据库时将其填充到 http-context 中(同样,请确保在请求结束时将其处理掉)

最后,您可以在属性中有一个单独的数据库上下文;连接池意味着这可能不是问题:

using(var db = SomeUtilityType.GetDb()) {
     ...
}
于 2012-12-11T12:03:53.033 回答