[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
跟踪。
它只是将实体附加到 dataContext。否则,您将必须使用主键搜索实体,然后编辑值并保存。
如果您知道数据库中已经存在一个实体,但可能已对其进行了更改,那么您可以告诉上下文附加该实体并将其状态设置为“已修改”。 http://msdn.microsoft.com/en-US/data/jj592676
我个人从未创建过实体并使用
State = EntityState.Modified
“添加”它,对我来说,它看起来相当迟钝。
我总是用
context.Movies.Add(movie)
添加实体
让我想到这个问题的是发现对于上下文中已经存在的现有实体,调用
db.Entry()
将连接任何尚未设置的关系。
例如。
Movie
Actor
行ActorId=42
,Actor
的值为空。dbContext.Entry(movie)
Actor
导航属性(假设它也已加载)。