1

我創建了一個簡單CodeFirst(實體框架4.1)範圍內,然後使用控制器上的文件夾,鼠標右鍵說:「添加控制器」,「實體框架」,挑一個我創建的簡單的codefirst實體和相關的上下文。它所控制的控制器代碼如下。想知道關於MVC3/EF1 CodeFirst網站上下文

什麼東西有我困惑就是爲什麼上下文是在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()); 
     } 

回答

1

好了,這使得原子提交,但我同意,這是不正確的方法。我使用MVC3和EF的Repository/Service/UnitOfWork模式,它工作得很好。搜索它,它有很多信息。同時,將其移入控制器操作中的using語句。

1

你是正確的,背景應該佈置。應該處置任何IDisposable

Controller implements IDisposable so you can just override Controller.Dispose(bool) and dispose it it。

然而,這是非常常見的使用DI注入一個上下文實例(或東西它包裝一個,像一個存儲庫)作爲一個構造函數的參數。在這種情況下,您可以使用DI容器的功能請求範圍實例。舉一個例子,在.NET閱讀依賴注入,由馬克·西曼。