ASP.NET Identity Обновление нескольких таблиц - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть две базы данных, одна из которых обрабатывает аутентификацию пользователя (таблицы идентификации по умолчанию asp.net), а другая - другие данные, в которых также есть пользовательская таблица.

Я пытаюсь обновить информацию пользователя втаблица aspnetuser, которая также обновит пользовательскую таблицу в другой базе данных.У меня есть код не обновляет необходимые поля в таблице aspnetuser и создает новую запись в пользовательской таблице пользователя, что не является желаемым результатом.Ниже приведен код, который у меня есть.

    [HttpPut("{id}")]
    public async Task<IActionResult> Update(string id, ApplicationUser appUser)
    {

        if (!ModelState.IsValid)
        {
            return NotFound();
        }
        //locate appUser Id from AspNetUser table
        var user = await _userManager.FindByIdAsync(appUser.Id);

        if (user == null)
        {
            return NotFound();
        }
        //locate email address that exists in the custom User table
        var contextUser = _context.UserTable.Where(u => u.Email == appUser.Email);

        if (contextUser == null)
        {
            return NotFound();
        }

        if (ModelState.IsValid)
        {
            try
            {
                await _userManager.UpdateAsync(appUser);

                UserTable personInfo = new User();
                personInfo.FirstName = appUser.FirstName;
                personInfo.LastName = appUser.LastName;
                personInfo.EmailAddress = appUser.Email;

                _context.UserTable.Update(personInfo);
                await aspnetdBContext.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {

            }
        }
        return Ok(appUser);

Когда я тестирую через почтальона, я получаю код Ok 200 с измененным результатом json.Таблица aspnetuser по-прежнему не обновляет обязательное поле.Он также не находит пользователя в пользовательской таблице.Куда я иду не так?

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Я полагаю, что таблицы UserTable и AppUser связаны как одно с отношением или могут быть один ко многим в том случае, если таблица User и таблица appuser связаны, то вы можете упростить свой код как

   try
            {
                appUser.personInfo.FirstName = appUser.FirstName;
                appUser.personInfo.LastName = appUser.LastName;
                appUser.personInfo.EmailAddress = appUser.Email;
                await _userManager.UpdateAsync(appUser); 
                await aspnetdBContext.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {

            }

Возможно, вы захотите изучить концепции ef Lazyloading и eagerLoading, чтобы лучше понять, как это работает

0 голосов
/ 11 февраля 2019

Вы должны использовать пользователя, полученного из базы данных, для предотвращения создания нового пользователя в вашей таблице, нет необходимости создавать пользователя с помощью new

//UserTable personInfo = new User();
contextUser.FirstName = appUser.FirstName;
contextUser.LastName = appUser.LastName;
contextUser.EmailAddress = appUser.Email;

, это поможет вам обновить вашу пользовательскую таблицу пользователей.

...