1

例如,我将如何做到这一点,以便在以下代码中 POST 操作可以获取缓存在 GET 操作中的实体。

Intellisense 告诉我,DbSet.Find()它将在访问数据库之前检查上下文以查看实体是否已缓存。在这种情况下DbSet.Find(),POST 操作中的内容确实会命中数据库,这意味着没有缓存任何内容。那么实体消失的 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");
    }
}
4

1 回答 1

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");
}
于 2013-03-07T02:43:54.363 回答