想知道MVC3 / EF1 Code First网站中的Context

时间:2011-11-01 20:09:50

标签: asp.net-mvc-3 entity-framework-4 ef-code-first datacontext

我创建了一个简单的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());
        }

2 个答案:

答案 0 :(得分:1)

你是正确的,应该处理上下文。任何IDisposable都应该被处置。

Controller实施IDisposable,因此您可以覆盖Controller.Dispose(bool)并将其置于那里。

但是,使用DI注入一个上下文实例(或者包含一个上下文的东西,比如存储库)作为构造函数参数是很常见的。在这种情况下,您使用DI容器的功能请求范围实例。例如,请阅读Mark Seeman的 .NET中的依赖注入

答案 1 :(得分:1)

嗯,这允许原子提交,但我同意,这不是正确的方法。我使用Repository / Service / UnitOfWork模式与MVC3和EF,它很好用。搜索SO,它有大量的信息。在此期间,将其移动到控制器操作内的using语句中。