c# - DbContext 处理?

标签 c# asp.net-mvc entity-framework idisposable

数据库上下文

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() 方法是如何为每个工作方法触发的?

最佳答案

一些注意事项:

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

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

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

关于c# - DbContext 处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15410181/

相关文章:

c# - 在不使用任何类型的情况下加载许多托管 DLL 是否不好?

c# - UWP ComboBox SelectedValue 不起作用

c# - 如何正确编写异步 XUnit 测试?

asp.net-mvc - Azure 上的 Microsoft.Web.Administration 程序集错误

c# - 包含非 EF 方法调用的 Select 子句

c# - 无法使 EF Code First 使用手动更改的数据库

c# - 使用 LINQ 自动生成类型的 Dapper 参数化查询

asp.net-mvc - 在 ASP.NET MVC 3 Action 方法中并行运行任务

asp.net-mvc - 包 'Microsoft.Net.Compilers' 的项目 PROJECT : Unable to find version 2. 0.0 的 NuGet 包还原失败

c# - Entity Framework 6 : Dynamically build search clause against DB