以下の状況でオブジェクトを正しく処分する方法を知りたいと思います。これはASP.NET MVCコントローラアクションです。 IDisposableを実装するリポジトリがあります。添付エンティティには関連するエンティティタスクが含まれています。添付ファイルの詳細をクリックすると、正しく表示されます。しかし、タスクをクリックすると、次の例外がスローされます。 "ObjectContextインスタンスが破棄されました..."私は、ビューがレンダリングされると、それが破棄され、ObjectContextが閉じられることを理解しています。オブジェクトを正しく廃棄する方法(ASP.NET MVC + Entity Framework)
public ActionResult Detail(Guid id)
{
Attachment attachment = null;
using (var attachmentRepository = IoC.Resolve<AttachmentRepository>())
{
attachment = attachmentRepository.SelectByKey(id);
return View("Detail", attachment);
}
}
このシナリオでは、私の質問は何ですか?
これは良い解決策ですか?この状況でObjectContextはいつ廃止されますか?ユーザーが別のビューに移動したら?またはガベージコレクタが実行されるとき?
public ActionResult Detail(Guid id)
{
Attachment attachment = null;
var attachmentRepository = IoC.Resolve<AttachmentRepository>();
attachment = attachmentRepository.SelectByKey(id);
return View("Detail", attachment);
}
おかげ
__BrokenGlass__はエンティティの読み込みに 'Include'を使うべきだと言っています。私はViewModelがあなたのデータをViewに渡すほうがよいと思います。ビューにデータを怠ってはいけない理由はいくつかあります:http://nhprof.com/learn/alerts/QueriesFromViews – Andreas