Обновить данные пользователя с Identity

218
25 декабря 2017, 10:18

Здравствуйте, мне нужно обновить данные пользователя с помощью Identity. Есть такой метод контролера :

[HttpPost]
public async Task<ActionResult> Edit(WDetailsModel model)
{
    if (ModelState.IsValid) { 
    try
    {
        var upd_user = new ApplicationUser
        {
            About = model.About,
            City = model.City,
            Country = model.Country,
            FName = model.F_Name,
            LName = model.L_Name,
            WebSite = model.WebSite,
            Phone = model.Phone,
            Email = model.Email,
        };
        var result = await UserManager.UpdateAsync(upd_user);
            if (!result.Succeeded)
            {
                foreach (var err in result.Errors)
                {
                    ModelState.AddModelError("", err);
                }
            }
            else
            {
                ViewBag.Result = "Новые данные сохранены";
                return View();
            }
    }
    catch (Exception ex)
        {
                ModelState.AddModelError("", ex.Message);
        }
    }
    return View(model);
}

Однако при попытке сохранить изменения получаю ошибку :

Name cannot be null or empty.

Если же поставить UserName, тем же что и у текущего User.Identity.Name выпадет ошибка о том, что пользователь с таким именем уже существует. Логично но я же использую UpdateAsync а не CreateAsync. Может вообще все неправильно сделал ? Подскажите. И связанный вопрос - по умолчанию Identity создает 6 таблиц при первом запуске - юзеры, клеймы, роли, миграции и т.д. Вопрос - если мне нужно создать еще несколько таблиц и работать с ними как поступить ? Нужно написать класс-модель этих таблиц ?

Answer 1

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

И да, для ваших личных классов создавайте свои классы модели и прописывайте их в стиле EF Code First

public class ApplicationDbContext : IdentityDbContext
{
    public DbSet<Class1> Class1s { get; set; }
    public DbSet<Class2> Class2s { get; set; }
    // ...
}

Обновлено:

Я обновление делаю обычно так:

ActionResult Edit(UserViewModel userViewModel ) {
   var userOld = db.Users.Find(userViewModel.UserName);
   if(userOld ==null) return null; // тут нужно статус код вернуть
   userOld.Name = userViewModel.Name;
   userOld.SomeField = userViewModel.SomeField;
   // ...
   db.SaveChanges();
}
READ ALSO
Ошибка в запросе к MySQL из C# - Table XXX doesn&#39;t exist

Ошибка в запросе к MySQL из C# - Table XXX doesn't exist

В данном запросе происходит поиск/проверка и вывод ID, фио в другую форму

209
Почему PauseToken прерывает Task?

Почему PauseToken прерывает Task?

Пытаюсь разобраться с PauseToken (Namespace: MicrosoftVisualStudio

185
checkbox запоминает при возврате на страницу

checkbox запоминает при возврате на страницу

Имеется данный код суть такая что нельзя выбирать больше 5 чекбоксов(у меня их 10)Все работает но проблема в том что когда человек возвращаться...

258