PasswordSignInAsync导致“无法跟踪实体类型'User'的实例,因为另一个具有键值的实例”为什么?

时间:2019-03-02 18:07:35

标签: c# asp.net-core asp.net-core-mvc entity-framework-core asp.net-core-identity

我正在使用ASP NET Core Identity以便将用户登录到他的帐户中

但是由于某种原因,它开始引发我异常

  

InvalidOperationException:无法跟踪实体类型'User'的实例,因为已经跟踪了另一个键值为'{Id:99d1aa12-3f75-497d-a4cc-5d2103c1b042}'的实例。附加现有实体时,请确保仅附加一个具有给定键值的实体实例。

是什么原因造成的?

public async Task<IActionResult> Login(string Login, string Password, string ReturnUrl = "/")
{
    var user = await _context.Users.AsNoTracking().FirstOrDefaultAsync(x => x.UserName == Login);

    if (user == null)
    {
        return View("Error");
    }

    var sign = await _signInManager.PasswordSignInAsync(user, Password, true, true); // here

    if(!sign.Succeeded)
    {
        return View("Error");
    }

    return Redirect(ReturnUrl);
}

1 个答案:

答案 0 :(得分:0)

您在此处使用AsNoTracking,这就是发生此问题的原因。删除它,它将可以正常工作。

在使用它之前,请确保您知道AsNoTracking的意思。

欢呼