DBContext.Entry 的作用是什么?

问题描述 投票:0回答:2
[HttpPost]
public ActionResult Edit(Movie movie)
{
    if (ModelState.IsValid)
    {
        db.Entry(movie).State = EntityState.Modified;
        db.SaveChanges();
        return RedirectToAction("Index");
    }
    return View(movie);
}

此操作接收电影模型并在数据库中更新它。
但我不知道怎么办。

movie
对象未附加到数据库,那么实体框架如何知道应该更新数据库中的哪一行?

我确信 Entry 方法与它有关,但我真的不知道这个方法是做什么的。我读到它提供了信息,但我无法理解如何通过仅更改条目的

State
来附加它并由
DBContext
跟踪。

asp.net asp.net-mvc entity-framework dbcontext
2个回答
43
投票

它只是将实体附加到 dataContext。否则,您将必须使用主键搜索实体,然后编辑值并保存。

如果您知道数据库中已经存在一个实体,但可能已对其进行了更改,那么您可以告诉上下文附加该实体并将其状态设置为“已修改”。 http://msdn.microsoft.com/en-US/data/jj592676


0
投票

我个人从未创建过实体并使用

State = EntityState.Modified
“添加”它,对我来说,它看起来相当迟钝。

我总是用

context.Movies.Add(movie)

添加实体

让我想到这个问题的是发现对于上下文中已经存在的现有实体,调用

db.Entry()
将连接任何尚未设置的关系。

例如。

  • 从数据库加载现有的
    Movie
  • 从数据库加载所有
    Actor
  • 在其上设置
    ActorId=42
    Actor
    的值为空。
  • 致电
    dbContext.Entry(movie)
  • 现在将使用 actor 实体设置
    Actor
    导航属性(假设它也已加载)。
  • 如果相关的 actor 尚未加载到上下文中,它仍将为 null。
© www.soinside.com 2019 - 2024. All rights reserved.