我跟着MVC music store tutorial,我來到他們正在使用數據庫連接的部分(DbConnection
是DbContext
的子代)。我被教導要創建這樣的方法(使用包裝):在MVC中使用db連接的包裝方法
public class StoreManagerController : Controller
{
//
// GET: /StoreManager/
public ActionResult Index()
{
using(var db = new DbConnection())
{
var albums = db.Albums.Include(a => a.Genre).Include(a => a.Artist);
return View(albums.ToList());
}
}
...
}
但Visual Studio生成我一個控制器,它看起來像這樣:
public class StoreManagerController : Controller
{
private DbConnection db = new DbConnection();
//
// GET: /StoreManager/
public ActionResult Index()
{
var albums = db.Albums.Include(a => a.Genre).Include(a => a.Artist);
return View(albums.ToList());
}
...
}
我認爲,Visual Studio是沒有錯的,但爲什麼我告訴用using
來包裝每種方法,以儘可能縮短連接,並讓用戶使用單獨的連接?
他們的榜樣可能會提供有關Controller.Disposing(真)的重寫部署的上下文。這就是T4模板在MVC5中所做的。 – Dismissile
如果是這種情況,那麼行爲可能是相似的。但是,我仍然更喜歡使用'using'語句的可讀性,而不是依賴稍微不太明顯的方法覆蓋。但是,這只是我... – rae1
如果你有一個需要訪問上下文的私有方法,那麼你需要讓該方法將上下文作爲參數,或者只是將它提供給類。不過,我從不直接在我的控制器中使用上下文。 – Dismissile