Почему не сохраняется в БД?

Есть такой код

var user = await db.Users.FindAsync(id);
user.Age = 20;

var someRes = user.Table1.Table2.SelectMany(
    s =>//тут критерии выбора
).ToList();

for (int i = 0; i < someRes.Count; i++)
{
    var r = someRes [i];
    r.DateTime = DateTime.UtcNow;
}

await db.SaveChangesAsync();


поле с Age изменяется. В someRes получается верная выборка, и при отладке, при проходе цикла, видно что внутри неё поля DateTime меняются. Но при сохранении значения полей не сохраняются, остаются старые значения.

В каком месте я делаю не так?
  • Вопрос задан
  • 297 просмотров
Решения вопроса 1
petermzg
@petermzg
Самый лучший программист
Вы забыли Update вызвать для каждого измененного элемента.
Примерно так
db.Users.Update(user);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
yarosroman
@yarosroman
C# the best
Не надо ToList() делать, этот метод делает новый список, при этом изменения в сущностях не отслеживаются EF.

var result = context.Users.Include(...).Where(...);
foreach(User u in result)
{
     u.Name="Domain\\"+Name;
}
await context.SaveChangesAsync();


ToList() лучше использовать, если вам необходимо кешировать последовательность, например если вам надо пройти по коллекции и удалить некоторые данные, при этом foreach выкинет исключение, что последовательность изменена.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы