Случай использования Microsoft.EntityFrameworkCore DbSet.Update (сущность [NotNullAttribute] TEntity) - PullRequest
1 голос
/ 08 марта 2019

Я относительно новичок в 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, и в В случае «обновления» ВСЕ из них будут модифицированы? Я не нашел объяснения, почему использование «Обновления» было бы предпочтительнее, или наоборот.

Спасибо.

1 Ответ

2 голосов
/ 08 марта 2019

При условии, что context не отключено отслеживание изменений, ничего. Если обновляемая сущность не отслеживается контекстом (например, context.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking; или вы используете context.MyModel.AsNoTracking()... для своего запроса), то вызов DbSet<T>.Update отследит сущность с EntityState, равным Modified. В таком случае ваш второй пример не сохранит никаких изменений в магазине.

...