2013-03-14 3 views
6

DbContextDbContext Entsorgung?

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; } 
} 

Das Gerüst erzeugt folgende Aktionsmethoden

// 
    // 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); 
    } 

Es sind Sollbruchstellen für jede Methode. Dispose() Methode funktioniert nach der Arbeit mit anderen Methoden.

Wie wird Dispose() Methode für jede Methode funktioniert gefeuert?

+0

'Entsorgen initialisiert initialisiert () 'Methode funktioniert nach der Arbeit mit anderen Methoden. Was meinst du damit? – jackncoke

+1

sieh dir diese Frage an http://StackOverflow.com/questions/1380019/asp-mvc-when-is-icontroller-dispose-bezeichnet – polybios

+0

@jackncoke, sory für mein Englisch. Ich meine Wie dispose-Methode heißt? –

Antwort

7

Ein paar Dinge zu beachten:

  • Die Lebensdauer des Controllers nur so lange, wie jede Anforderung ist.
  • Jede Anfrage wird eine Aktionsmethode ausführen.
  • Dispose wird aufgerufen, wenn der Controller die Anforderung abschließt.

Also, das ist, was bei jeder Anfrage passiert:

  1. -Controller
  2. DbContext
  3. Aktion Methode führt
  4. -Controller Dispose-Methode führt
+0

+ 1.Ich habe es, "Controller entsorgen wird nach jeder Anfrage aufgerufen". Aber wie? Wo ist die Brennmethode? Wir verwenden dafür eine Anweisung, aber wie nennt der Controller die Methode dispose? –

+0

@ AliRızaAdıyahşi Das MVC-Framework ruft die dispose-Methode des Controllers auf. – jrummell

+0

@ Forty-Two Es ist notwendig, wenn Sie sofort entsorgen wollen. Eine andere Option wäre die Verwendung eines DI-Frameworks, das die Lebensdauer für Sie steuert, z. B. [Unity.Mvc3] (http://unitymvc3.codeplex.com/). – jrummell