Asp.net mvc 3 想知道MVC3/EF1 CodeFirst网站中的上下文吗

Asp.net mvc 3 想知道MVC3/EF1 CodeFirst网站中的上下文吗,asp.net-mvc-3,entity-framework-4,ef-code-first,datacontext,Asp.net Mvc 3,Entity Framework 4,Ef Code First,Datacontext,我创建了一个简单的CodeFirst(Entity Framework 4.1)上下文,然后在controller文件夹上使用鼠标右键说:“添加控制器”,“实体框架”,选择了我创建的一个简单CodeFirst实体和相关上下文。它生成的控制器代码如下所示 让我困惑的是,为什么在控制器类中将上下文创建为私有对象。我认为应该在using()中创建它,以便在方法结束时可以正确地处理它 我错过了什么?我相信写这篇文章的人不知道他们在做什么 谢谢 namespace Web.Controllers {

我创建了一个简单的CodeFirst(Entity Framework 4.1)上下文,然后在controller文件夹上使用鼠标右键说:“添加控制器”,“实体框架”,选择了我创建的一个简单CodeFirst实体和相关上下文。它生成的控制器代码如下所示

让我困惑的是,为什么在控制器类中将上下文创建为私有对象。我认为应该在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());
        }

你认为应该处理上下文是正确的。任何
IDisposable
都应丢弃

Controller
实现了
IDisposable
,因此您可以覆盖
Controller.Dispose(bool)
并在那里进行处理


然而,使用DI将上下文实例(或封装实例的东西,如存储库)作为构造函数参数注入是非常常见的。在这种情况下,您可以使用DI容器的特性请求实例的作用域。例如,阅读Mark Seeman在.NET中的依赖注入。

好吧,这允许原子提交,但我同意,这不是正确的方法。我将Repository/Service/UnitOfWork模式与MVC3和EF结合使用,效果非常好。搜索它,它上面有大量的信息。同时,将其移动到控制器操作中的using语句中