2013-03-14 18 views
6

DbContextDbContext xử lý?

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

Các giàn giáo được tạo ra phương pháp hành động sau

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

Có điểm break cho mỗi phương pháp. Phương pháp Dispose() đang hoạt động sau khi làm việc với các phương pháp khác.

Phương pháp Dispose() được kích hoạt cho mọi phương pháp hoạt động như thế nào?

+0

'Vứt bỏ () 'phương thức hoạt động sau khi làm việc với các phương thức khác. Ý bạn là gì? – jackncoke

+1

xem câu hỏi này http://stackoverflow.com/questions/1380019/asp-mvc-when-is-icontroller-dispose-called – polybios

+0

@jackncoke, sory cho tiếng anh của tôi. Ý tôi là Phương pháp vứt bỏ được gọi là gì? –

Trả lời

7

Một số điều cần lưu ý:

  • Thời gian tồn tại của điều khiển của bạn là chỉ miễn là mỗi yêu cầu.
  • Mỗi yêu cầu sẽ thực thi một phương thức hành động.
  • Vứt bỏ được gọi khi bộ điều khiển hoàn thành yêu cầu.

Vì vậy, đây là những gì xảy ra trong mỗi yêu cầu:

  1. điều khiển khởi
  2. DbContext khởi
  3. phương pháp hành động thực hiện
  4. phương pháp
  5. khiển Vứt bỏ thực hiện
+0

+ 1.Tôi đã nhận nó, "điều khiển vứt bỏ được gọi là sau mỗi yêu cầu". Nhưng bằng cách nào? Phương pháp bắn ở đâu? Chúng tôi bạn 'sử dụng statement' cho điều này, nhưng làm thế nào để điều khiển gọi là phương pháp vứt bỏ? –

+0

@ AliRızaAdıyahşi Khung MVC gọi phương thức xử lý của bộ điều khiển. – jrummell

+0

@ Bốn mươi hai Cần thiết nếu bạn muốn vứt bỏ ngay lập tức. Một tùy chọn khác sẽ sử dụng khung DI kiểm soát tuổi thọ cho bạn, chẳng hạn như [Unity.Mvc3] (http://unitymvc3.codeplex.com/). – jrummell