Entity Framework 7:什么时候需要db.Entity.Update(x)?

Entity Framework 7: when db.Entity.Update(x) required?

请解释一下什么时候需要使用db.Entity.Update(x)? 下面的代码没有它也能工作。

                using (var db = new DBContext())
                {
                    var b = db.Building.First();
                    b.Residental = true;
                    db.Building.Update(b); // Still works without this line
                    await db.SaveChangesAsync();
                }

事实是 EF 使用实体的更改跟踪系统。当它打开时,您只需调用 SaveChanges() ,它就会自动更新跟踪的实体。但是,如果您禁用自动跟踪或关闭上下文,它将不再跟踪更改,因此将无法应用它们。

您可以在 DbContext here.

范围之外查看它如何工作的示例

实体跟踪非常有用,但它会降低性能,因此如果您愿意,可以禁用它并手动执行更新和其他命令(这与将 EntityState 设置为 Modified/Deleted/etc 相同)。但是,如果禁用它,请小心 - 延迟加载 EF 的代理类型可能会出现问题。因此,如果您的项目不是很大并且性能对您来说不是最重要的事情,我建议启用实体跟踪。