0

パラメータ(filterContext)OnActionFilterExecutingを受け取るメソッドで現在のdbコンテキストにアクセスする必要があります。ActionExecutingContext

デバッグ中にローカルスタックで確認できますが、アクセス方法がわかりません。

私が試してみました:

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

これが私のデバッグトレースです:http://i.imgur.com/P7zu5.png

PS:私はC#を初めて使用するので、構文やデバッグスタックの読み方を完全には理解していませんが、学習しています。

4

1 に答える 1

0

DBへのアクセスを提供するものにコントローラーをキャストする必要があります。次に例を示します。

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

PartControllerただし、 (またはその中のメソッド)ではないもので属性を使用すると、問題が発生します。の代わりにbase-typeまたはinterfaceを使用することで、おそらくそれを改善できますPartController

別のアプローチは、http-contextを使用してDBを伝達することです。

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

そして、dbを作成するときにhttp-contextに詰め込みます(同様に、リクエストが終了したときに必ず破棄してください)

最後に、属性に個別のDBコンテキストを含めることができます。接続プーリングは、これが問題にならない可能性があることを意味します。

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