作为一个例子我将如何制作它,以便在下面的代码中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");
}
}
答案 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");
}