Заметил, что часто используют эти методы в связке:
context.Set<User>().Attach(user);
context.Entry(user).State = EntityState.Modified;
В чем смысл такого использования, если можно использовать только context.Entry(user) когда нужно изменить состояние?
При этом автоматически будет вызван context.Set<User>().Attach(user);, или я ошибаюсь?
В чем суть, когда мы вызываем:
context.Entry(user).State = EntityState.Modified;
мы не только прикрепляем сущность к DbContext, но и говорим что сущность является грязной. Это заставит EF в случае обновления, сгенерировать запрос update, который обновит все поля, которые присутствуют в данной сущности, несмотря на то, что в реальности могло измениться значение всего лишь одного поля.
когда мы вызываем:
context.Set<User>().Attach(user);
мы просто прикрепляем сущность к DbContext, при этом свойство State у сущности равно EntityState.Unchanged. Это значит, что в случае изменения какого-то одно из полей, EF сгенерирует update запрос, который обновит только это поле.
Вызов методов:
context.Set<User>().Attach(user);
context.Entry(user).State = EntityState.Modified;
на мой взгляд избыточен.
Отсюда
If you have an entity that you know already exists in the database but which is not currently being tracked by the context then you can tell the context to track the entity using the Attach method on DbSet. The entity will be in the Unchanged state in the context.
Если у вас есть сущность о которой вам известно, что она уже есть в БД, но при этом данная сущность не отслеживается в данном контексте, то вы можете присоединить ее к данному контексту путем Attach метода в DbSet. В таком случае данная сущность будет иметь статус Unchanged (неизмененная).
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости