Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

.NET 5 - Erro System.AggregateException ao utilizar o Identity para criar role

Fala pessoal, tudo bem?!

Este tópico é apenas para contribuir com um erro que tomei ao tentar criar a role utilizando o RoleManager no curso .NET 5 e Identity: autenticando e autorizando usuários.

Ao tentar executar a linha de código abaixo:

_ = _roleManager.CreateAsync(new IdentityRole("admin")).Result

Recebia o seguinte erro:

System.AggregateException: 'One or more errors occurred. (A second operation was started on this context instance before a previous operation completed. This is usually caused by different threads concurrently using the same instance of DbContext. For more information on how to avoid threading issues with DbContext, see https://go.microsoft.com/fwlink/?linkid=2097913.)'

Ao pesquisar um pouco entendi que se tratava do ciclo de vida da aplicaçã, havia uma conexão de DBContext aberta e antes desse ciclo ser finalizado outra conexção de RoleManager estava concorrendo (Me corrijam se não for este o entendimento).

Para solucionar essa questão, fiz uma alteração na inicialização do AddDbContext conforme abaixo:

builder.Services.AddDbContext<UserDbContext>(options => {
options.UseMySQL(builder.Configuration.GetConnectionString("UsuarioConnection"));

},ServiceLifetime.Transient);

após a inserção das options inseri o "ServiceLifetime" como "Transient", isso eliminou a concorrência com o RoleManager, umas vez que ele abre uma nova instância para conexão.

Espero que ajude caso alguém passe por este mesmo problema e se há uma maneira melhor e mais adequada, por favor, peço que compartilhem aqui também para que possamos continuar evoluindo. 

Abraço!
1 resposta
solução!

Oii Alan, tudo bem?

Muito obrigada por compartilhar sua experiência e a solução que encontrou para o problema. De fato, problemas relacionados ao ciclo de vida do DbContext podem levar a erros desse tipo, especialmente quando há concorrência no acesso ao banco de dados.

A abordagem de configurar o ServiceLifetime.Transient para o DbContext pode ser eficaz para evitar problemas de concorrência, garantindo que cada solicitação receba uma instância separada do contexto do banco de dados.

É sempre útil compartilhar soluções para problemas que você encontra, pois isso pode ajudar outros desenvolvedores que possam enfrentar desafios semelhantes.

Um abraço e bons estudos.