DbContext处理?

的DbContext

public class HaberPortalDB : DbContext { public DbSet Haberler { get; set; } public DbSet Kategoriler { get; set; } public DbSet Yazarlar { get; set; } } public class Haberler { public virtual int Id { get; set; } public virtual string Baslik { get; set; } public virtual string Aciklama { get; set; } public virtual string Icerik { get; set; } public virtual int YazarId { get; set; } public virtual Yazarlar Yazar { get; set; } public virtual int KategoriId { get; set; } public virtual Kategoriler Kategori { get; set; } public virtual ICollection Resimler { get; set; } } public class Kategoriler { public virtual int Id { get; set; } public virtual string KategoriAdi { get; set; } public virtual string Aciklama { get; set; } public virtual ICollection Haberler { get; set; } } public class Yazarlar { public virtual int Id { get; set; } public virtual string YazarAdi { get; set; } public virtual string Ozgecmis { get; set; } public virtual string Eposta { get; set; } public virtual ICollection Haberler { get; set; } } public class Resimler { public virtual int Id { get; set; } public virtual string Url { get; set; } public virtual string Ad { get; set; } public virtual Haberler Haber { get; set; } } 

脚手架正在产生以下动作方法

  // // GET: /Test/ public ActionResult Index() { return View(db.Kategoriler.ToList()); } // // GET: /Test/Details/5 public ActionResult Details(int id = 0) { Kategoriler kategoriler = db.Kategoriler.Find(id); if (kategoriler == null) { return HttpNotFound(); } return View(kategoriler); } // // GET: /Test/Create public ActionResult Create() { return View(); } // // POST: /Test/Create [HttpPost] public ActionResult Create(Kategoriler kategoriler) { if (ModelState.IsValid) { db.Kategoriler.Add(kategoriler); db.SaveChanges(); return RedirectToAction("Index"); } return View(kategoriler); } // // GET: /Test/Edit/5 public ActionResult Edit(int id = 0) { Kategoriler kategoriler = db.Kategoriler.Find(id); if (kategoriler == null) { return HttpNotFound(); } return View(kategoriler); } // // POST: /Test/Edit/5 [HttpPost] public ActionResult Edit(Kategoriler kategoriler) { if (ModelState.IsValid) { db.Entry(kategoriler).State = EntityState.Modified; db.SaveChanges(); return RedirectToAction("Index"); } return View(kategoriler); } // // GET: /Test/Delete/5 public ActionResult Delete(int id = 0) { Kategoriler kategoriler = db.Kategoriler.Find(id); if (kategoriler == null) { return HttpNotFound(); } return View(kategoriler); } // // POST: /Test/Delete/5 [HttpPost, ActionName("Delete")] public ActionResult DeleteConfirmed(int id) { Kategoriler kategoriler = db.Kategoriler.Find(id); db.Kategoriler.Remove(kategoriler); db.SaveChanges(); return RedirectToAction("Index"); } protected override void Dispose(bool disposing) { db.Dispose(); base.Dispose(disposing); } 

每种方法都有断点。 在其他方法工作之后, Dispose()方法正在工作。

如何为每个工作方法触发Dispose()方法?

有几点需要注意:

  • 控制器的生命周期仅与每个请求一样长。
  • 每个请求都将执行一个操作方法。
  • 控制器完成请求时调用Dispose。

所以,这是每个请求中发生的事情:

  1. 控制器初始化
  2. DbContext初始化
  3. Action方法执行
  4. Controller Dispose方法执行