json オブジェクトを返すアクション メソッドがいくつかあります。例えば:
public JsonResult MyAction()
{
var entities = db.Entities.Include("Location").Where(e => e.Name != null);
var model = entities.Select(e => new MyModel(e));
return Json(model, JsonRequestBehavior.AllowGet);
}
一部のモデル クラスでは、エンティティの内部要素にアクセスします。
public class MyModel
{
private Entity _e;
public MyModel(Entity e)
{
_e = e;
}
public string[] LocationName
{
get
{
return _e.Location.Name;
}
}
}
Global.asax.cs ファイルの OnRequestCompleted のような場所にリポジトリ (db) がある場合、これは問題なく機能します。問題は、現在、BaseController の OnActionExecuted メソッドでデータベースを破棄していることです。オブジェクトがシリアル化されているときに、接続が既に閉じられているために失敗します。
私の質問は、OnActionExecuted はデータベース接続を破棄する正しい場所ですか、それとも別の場所で実行する必要がありますか? そこにリポジトリを配置しても問題ない場合は、 Json(model) を呼び出した瞬間にシリアル化を「強制」して、後で失敗しないようにするにはどうすればよいですか。
ご協力いただきありがとうございます!