Отделенная сущность вызывает исключения отслеживания при вызове UserManager.AddToRoleAsync () - PullRequest
0 голосов
/ 26 июня 2019

Я пытаюсь назначить IdentityRole для объекта IdentityUser, но получаю следующее исключение:

InvalidOperationException: экземпляр типа объекта «Пользователь» не может быть отслежен, поскольку другой экземпляр сто же значение ключа для {'Id'} уже отслеживается.При присоединении существующих сущностей убедитесь, что присоединен только один экземпляр сущности с данным значением ключа.

В моем методе я выбираю объект User и устанавливаю State в Detached.Я также пытался использовать AsNoTracking, но все еще та же ошибка.

Код :

public async Task<IdentityResult> AssignRole(int userId, string roleName)
{
    IUser usr = await this.DBContext.Context.IdentityUsers.FirstOrDefaultAsync(r => r.Id.Equals(userId));

    this.DBContext.Context.Detach(usr);

    var result = await _user.AddToRoleAsync((User)usr, roleName);

    return result;
}

DBContext, Detach :

public void Detach(ILCAssetsBase entity)
{
    this.Entry(entity).State = EntityState.Detached;
}

1 Ответ

0 голосов
/ 26 июня 2019

Проблема заключалась в том, что объект User был обработан другим DbContext.

Это работает:

public async Task<IdentityResult> AssignRole(int userId, string roleName)
{
    User usr = await _user.FindByIdAsync(userId.ToString());
    var result = await _user.AddToRoleAsync(usr, roleName);

    return result;
}
...