ASP.NET身份更新多个表

时间:2019-02-11 00:48:35

标签: c# asp.net asp.net-web-api asp.net-identity

我有两个数据库,一个数据库处理用户身份验证(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);

当我通过邮递员进行测试时,我得到了带有更改后的json结果的Ok 200代码。 aspnetuser表仍然不会更新必填字段。也不会在自定义用户表中找到该用户。我要去哪里错了?

2 个答案:

答案 0 :(得分:0)

您应该使用从数据库中检索到的用户来防止在表中创建新用户,而无需使用new

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

这将帮助您更新自定义用户表。

答案 1 :(得分:0)

我相信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概念,以更好地了解它们的工作原理