Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Microsoft.EntityFrameworkCore DbSet.Update([NotNullAttribute]TEntity实体)用例_C#_.net Core_Entity Framework Core - Fatal编程技术网

C# Microsoft.EntityFrameworkCore DbSet.Update([NotNullAttribute]TEntity实体)用例

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

我对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.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();
}