Microsoft.EntityFrameworkCore DbSet.Update

我对 EntityFrameworkCore 比较陌生。我看到了一些使用 Update 函数的代码,这引起了我的注意。问题基本上是“为什么要使用它?”


有什么区别:


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();

}


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();

}

从我已经阅读的内容来看,更新会将 MyModel 中的所有属性标记为已修改,但是这两者之间的结果有什么区别?据我所知,当我调用“SaveChanges”时,无论“更新”如何,修改后的字段都将被保存,不同之处在于,如果我不“更新”,唯一将被修改的两个属性是 Foo 和 Bar,并且在“更新”的情况下所有这些都将被修改?我没有找到任何解释为什么使用“更新”更可取,反之亦然。


摇曳的蔷薇
浏览 135回答 1
1回答

UYOU

假设context没有禁用更改跟踪,什么都没有。如果上下文没有跟踪要更新的实体(例如context.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;,或者您context.MyModel.AsNoTracking()...用于查询),则调用将使用ofDbSet<T>.Update跟踪实体。在这种情况下,您的第二个示例不会保存对商店的任何更改。EntityStateModified
打开App,查看更多内容
随时随地看视频慕课网APP