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 的代理类型可能会出现问题。因此,如果您的项目不是很大并且性能对您来说不是最重要的事情,我建议启用实体跟踪。
请解释一下什么时候需要使用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 的代理类型可能会出现问题。因此,如果您的项目不是很大并且性能对您来说不是最重要的事情,我建议启用实体跟踪。