1

例として、次のコードで POST アクションが GET アクションでキャッシュされたエンティティを取得できるようにする方法を教えてください。

インテリセンスは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 に答える