我创建了一个简单的CodeFirst(Entity Framework 4.1)上下文然后,在控制器文件夹上使用鼠标右键说:“添加控制器”,“实体框架”,选择了我创建的一个简单的代码优先实体,并将其关联起来上下文。它生成的控制器代码如下所示。
让我感到困惑的是为什么Context被创建为Controller类中的私有对象。我认为它应该在using()中创建,以便在方法结束时可以正确处理。
我在这里缺少什么?我确信写这篇文章的人不会做他们正在做的事情。
由于
namespace Web.Controllers
{
public class TaskInfoController : Controller
{
private TaskContext db = new TaskContext();
//
// GET: /TaskInfo/
public ViewResult Index()
{
var taskinfos = db.TaskInfos.Include(t => t.TaskGroup);
return View(taskinfos.ToList());
}
答案 0 :(得分:1)
你是正确的,应该处理上下文。任何IDisposable
都应该被处置。
Controller
实施IDisposable
,因此您可以覆盖Controller.Dispose(bool)
并将其置于那里。
但是,使用DI注入一个上下文实例(或者包含一个上下文的东西,比如存储库)作为构造函数参数是很常见的。在这种情况下,您使用DI容器的功能请求范围实例。例如,请阅读Mark Seeman的 .NET中的依赖注入。
答案 1 :(得分:1)
嗯,这允许原子提交,但我同意,这不是正确的方法。我使用Repository / Service / UnitOfWork模式与MVC3和EF,它很好用。搜索SO,它有大量的信息。在此期间,将其移动到控制器操作内的using语句中。