2013-03-14 33 views
6

的DbContextDbContext处置?

public class HaberPortalDB : DbContext 
{ 
    public DbSet<Haberler> Haberler { get; set; } 
    public DbSet<Kategoriler> Kategoriler { get; set; } 
    public DbSet<Yazarlar> 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> 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> 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> 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()如何为每种方法工作?

+0

'的Dispose( )'方法在其他方法的工作之后工作。这是什么意思? – jackncoke 2013-03-14 13:13:42

+1

看看这个问题http://stackoverflow.com/questions/1380019/asp-mvc-when-is-icontroller-dispose-called – polybios 2013-03-14 13:16:18

+0

@jackncoke,sory for my english。我的意思是如何调用dispose方法? – 2013-03-14 13:27:04

回答

7

有几件事情需要注意:

  • 控制器的寿命只有只要每个请求。
  • 每个请求将执行一个操作方法。
  • 当控制器完成请求时调用Dispose。

所以,这是每一个请求时会发生什么:

  1. 控制器初始化
  2. 的DbContext初始化
  3. 操作方法执行
  4. 控制器Dispose方法执行
+0

+ 1.我明白了,“控制器配置在每个请求后被调用”。但是如何?射击方法在哪里?我们为此使用'语句',但控制器如何调用dispose方法? – 2013-03-14 13:25:53

+0

@AliRızaAdıyahşiMVC框架调用控制器的dispose方法。 – jrummell 2013-03-14 13:29:27

+0

@四十二如果你想立即处置,这是必要的。另一个选择是使用一个DI框架来控制你的生命周期,比如[Unity.Mvc3](http://unitymvc3.codeplex.com/)。 – jrummell 2013-03-14 13:31:26

相关问题