我想知道如何在下列情况下正确处理对象。这是一个ASP.NET MVC控制器操作。有一个实现IDisposable的仓库。附件实体包含相关的实体任务。当我点击附件详细信息时,它显示正确。但是当我点击这个任务时,下面的异常抛出:“ObjectContext实例已经被处置...”。我明白,当视图呈现时,它被放置并且ObjectContext被关闭。如何正确处理对象(ASP.NET MVC +实体框架)
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 2012-02-03 15:51:37