#entity-framework #asp.net-core #entity-framework-core
#entity-framework #asp.net-core #entity-framework-core
Вопрос:
Я использую VS 2019 с ASP.NET Core 3.1 и EF Core 3.1, и заметил, что коды по умолчанию для базовой операции редактирования являются:
public async Task<IActionResult> OnPostAsync()
{
//...
_context.Attach(entity).State = EntityState.Modified;
//...
}
Из руководств EF я также узнал:
_context.Entry(entity).State = EntityState.Modified;
Просматривая документацию, я понял, что DbContext.Attach
по умолчанию устанавливает Unchanged
состояние. Но будет ли установка состояния на EntityState.Modified
сразу после, как показано в коде VS scaffolded, эквивалентна установке его через DbContext.Entry().State
?
Затем я подумал, DbContext.Attach
использовался ли, потому что объект еще не отслеживался. Но документация MS говорит об этом DbContext.Entry()
методе:
Этот метод может быть вызван для объекта, который не отслеживается. Затем вы можете установить свойство State для возвращаемой записи, чтобы контекст начал отслеживать объект в указанном состоянии.
Так что это меня немного смутило. Поскольку оба .Entry()
и .Attach()
(без настройки.Состояние еще) возвращает EntityEntry<TEntity>
, в чем разница между этими двумя методами до установки свойства .State? Могут ли они использоваться взаимозаменяемо в приведенном выше сценарии?
Комментарии:
1. Я думаю, что их самое большое отличие — это состояние, attach изменит состояние на неизменное, при вводе состояние отключено.