C# Microsoft.EntityFrameworkCore DbSet.Update([NotNullAttribute]TEntity实体)用例
我对EntityFrameworkCore比较陌生。我看到一些使用更新功能的代码,引起了我的注意。问题基本上是“为什么要使用它?” 以下两者之间的区别是什么:C# Microsoft.EntityFrameworkCore DbSet.Update([NotNullAttribute]TEntity实体)用例,c#,.net-core,entity-framework-core,C#,.net Core,Entity Framework Core,我对EntityFrameworkCore比较陌生。我看到一些使用更新功能的代码,引起了我的注意。问题基本上是“为什么要使用它?” 以下两者之间的区别是什么: var m = await context.MyModel.Where(e => e.Id == model.Id).FirstOrDefaultAsync(); if (m != null) { m.Foo = model.Foo; m.Bar = model.Bar; context.MyModel.Up
var m = await context.MyModel.Where(e => e.Id == model.Id).FirstOrDefaultAsync();
if (m != null)
{
m.Foo = model.Foo;
m.Bar = model.Bar;
context.MyModel.Update(m);
await context.SaveChangesAsync();
}
及
从我已经阅读的内容来看,更新会将MyModel中的所有属性标记为已修改,但是这两者之间的结果会有什么不同?据我所知,当我调用“SaveChanges”时,无论“Update”如何,修改后的字段都将被保存,区别在于如果我不“Update”,将修改的仅有两个属性是Foo和Bar,如果是“Update”,所有属性都将被修改?我没有找到任何解释来解释为什么使用“更新”更可取,反之亦然
谢谢。假设
上下文
未禁用更改跟踪,则无任何更改。如果要更新的实体未被上下文跟踪(例如context.ChangeTracker.QueryTrackingBehavior=QueryTrackingBehavior.NoTracking;
或您使用context.MyModel.AsNoTracking()…
进行查询),然后调用DbSet.Update
将跟踪EntityState
为Modified
的实体。在这种情况下,您的第二个示例将不会保存对存储的任何更改。附带说明:wait context.MyModel.Where(e=>e.Id==model.Id).FirstOrDefaultAsync()
可以缩短为wait context.MyModel.FirstOrDefaultAsync(e=>e.Id==model.Id)代码>我明白了。非常感谢。
var m = await context.MyModel.Where(e => e.Id == model.Id).FirstOrDefaultAsync();
if (m != null)
{
m.Foo = model.Foo;
m.Bar = model.Bar;
await context.SaveChangesAsync();
}