1

如标题所示,我有一个方法:

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

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

它如何识别需要更新的项目?我没有指定任何类似db.Update(thread)或类似的东西,它知道在没有我帮助的情况下要更新什么。它下有哪些机制?

4

1 回答 1

3

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

当您更新标题时,可能有两种情况:

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

您可以在此处阅读有关该过程的更多信息。

于 2012-08-22T20:02:13.323 回答