Обновление модели в базе данных Entity Framework

194
09 марта 2018, 12:29

Изменяю данные пользователя на сайте, user_'у присваиваются поля user'a, но изменения не вступают в силу. Если же изменять поля пользователя по отдельности (к примеру user_.nickname = user.nickname и т.д), то всё работает. В чем проблема?

    [HttpPost]
    public async Task<IActionResult> EditUser(User user)
    {
        User user_ = await userContext.Users.FirstOrDefaultAsync(u => u.Id == user.Id);
        user_ = user;            
        await userContext.SaveChangesAsync();
        return RedirectToAction("UserList");
    }
Answer 1

EntityFramework отслеживает состояние всех своих объектов во внутренних списках и реагирует на них. То есть у него внутри есть список ссылок на все объекты и что вы там делаете с внешней переменной ему все равно. Сейчас вы просто теряете ссылку на полученный объект и ничего не происходит.

Для того, чтобы EntityFramework нормально отреагировал, надо ему сказать явно переписать состояние внутреннего объекта на внешний. Делается это методом Attach:

[HttpPost]
public async Task<IActionResult> EditUser(User user)
{
    userContext.Users.Attach(user);
    userContext.ObjectStateManager.ChangeObjectState(user, EntityState.Modified);
    await userContext.SaveChangesAsync();
    return RedirectToAction("UserList");
}
READ ALSO
C# ftp загрузка файлов из директории

C# ftp загрузка файлов из директории

Как реализовать функцию загрузки всех файлов из X директории в Y директорию на ftp

166
Считать данные из Region

Считать данные из Region

На форме находится PictureBox, в котором можно перетаскивать изображение путем зажатия левой клавиши мыши, и масштабировать путем прокрутки колесом...

148
Вызов функции С++ из памяти С#

Вызов функции С++ из памяти С#

Здравствуйте! Возникла следующая проблема: появилась необходимость вызвать функцию из приложения, написанного на С++, путём вызова ее из памяти...

138
По поводу загрузки изображения во vue.js

По поводу загрузки изображения во vue.js

Подскажите, как можно загрузить изображение во vuejs без перезагрузки страницы, то есть только добавляю, и отображает на странице мгновенно

251