EF Code First - 如何知道要更新的对象?

时间:2012-08-22 19:09:12

标签: entity-framework

在标题中,我有一个方法:

void method(MyDb db, Thread thread, Post post)
{
  thread.Title = "changed";
  db.SaveChanges();
}

(当然线程项在MyDb对象中)

如何识别需要更新的项目?我没有在db.Update(thread)之类的任何地方指定任何类似的内容,它在没有我帮助的情况下知道要更新的内容。它下面有哪些机制?

1 个答案:

答案 0 :(得分:3)

从数据库加载实体Thread时,它默认为“附加”。这意味着EF在内部保持对您的实体的引用,并且当您从数据库加载实体时,它还保留实体的原始值。

更新标题时,可能会出现两种情况:

  • 您正在使用更改跟踪代理,并且EF已收到有关您的更改的通知,因此它现在知道您的实例已被修改,并且当您致电SaveChanges
  • 时,它会将这些更改应用于数据库
  • 您没有使用更改跟踪代理,当您调用SaveChanges时,EF会通过其内部维护的实体引用列表并检查是否有任何实体具有与原始值不同的任何属性 - 所有此类实体及其修改后的属性在更新期间都会更新到数据库SaveChanges

您可以详细了解该流程here