jsonオブジェクトを返すアクションメソッドがいくつかあります。例えば、ASP.NET MVC:コントローラアクションを終了する前に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);
}
いくつかのモデルクラスでは、Iはエンティティの内部要素にアクセスします。
public class MyModel
{
private Entity _e;
public MyModel(Entity e)
{
_e = e;
}
public string[] LocationName
{
get
{
return _e.Location.Name;
}
}
}
Global.asax.csファイルでOnRequestCompletedのような場所でのIリポジトリ(デシベル)場合、これはうまく動作します。 問題は、今はBaseControllerのOnActionExecutedメソッドにdbを配置していて、オブジェクトがシリアル化されているときにbcが失敗した場合、接続はすでに閉じられているということです。
私の質問は、OnActionExecutedはデータベース接続を破棄する正しい場所ですか、それとも別の場所で実行する必要がありますか? リポジトリをそこに配置しても問題がなければ、Json(モデル)と呼ぶ瞬間にシリアライゼーションを「強制的に」強制して、後で失敗しないようにするにはどうすればいいですか?
ありがとうございました!
は、実際にはそれが唯一のエンティティではなく、場所を取得します)私は(ToListメソッドを使用している場合でも、正確に真実ではないのです。場所は、アクセスされると取得されます。この場合は、シリアライゼーションが発生します。 – willvv
これは、熱心な読み込みが機能していないことを意味しています。これは、遅延ロードされたプロパティとして扱われます。これは別の問題です。あなたのモデルからエンティティを離陸しようとしましたが、選択したラムダにプロパティが割り当てられていますか? – Meligy