如何在没有数据库往返的POST操作中获取在GET操作中缓存的实体?

时间:2013-03-07 02:33:02

标签: asp.net-mvc entity-framework

作为一个例子我将如何制作它,以便在下面的代码中POST动作可以获得在GET动作中缓存的实体。

Intellisense告诉我DbSet.Find()将检查上下文,以查看实体是否在命中数据库之前被缓存。在这种情况下,POST操作中的DbSet.Find()执行命中数据库,这意味着没有任何缓存。那么实体消失的GET动作和POST动作之间发生了什么变化?

我是否真的必须再次从数据库中取回一个实体才能将其删除?

public class UserController : Controller
{
    private testContext db = new testContext();

    // GET: /User/Delete/5
    public ActionResult Delete(int id = 0)
    {
        User user = db.Users.Find(id);
        if (user == null)
        {
            return HttpNotFound();
        }

        return View(user);
    }


    // POST: /User/Delete/5
    [HttpPost, ActionName("Delete")]
    public ActionResult DeleteConfirmed(int id)
    {
        User user = db.Users.Find(id);
        db.Users.Remove(user);
        db.SaveChanges();
        return RedirectToAction("Index");
    }
}

1 个答案:

答案 0 :(得分:1)

要在没有往返数据库的情况下删除,您可以执行以下操作:

[HttpPost, ActionName("Delete")]
public ActionResult DeleteConfirmed(int id)
{
    User user = new User {UserID = id};
    db.Users.Attach(user);
    db.Users.Remove(user);
    db.SaveChanges();
    return RedirectToAction("Index");
}