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

Não é uma dúvida e sim uma resolução. Curso ASPNETCORE MVC ECOMMERCE pt1 - Aula 6

Vi que várias pessoas tiveram dúvida na aula 6. Carrinho e Resumo do curso ASP.NET Core parte 1: Um e-Commerce com MVC e EF Core pois está dando o erro abaixo quando você tenta adicionar os produtos no carrinho:

System.InvalidOperationException: 'Sequence contains more than one element'

Como não achei nenhuma resolução correta em todas as discussões sobre esse erro e nem consegui responder elas pois foram fechadas, resolvi explicar aqui como resolver corretamente.

Esse erro se dá pois em certo momento do curso o professor errou uma parte do código que adiciona os produtos do JSON no banco cada vez que rodamos a aplicação.

O professor corrigiu a parte do código que fica adicionando os produtos porém o banco de dados está poluído e os dados que foram duplicados continuam lá.

Não adianta usar o método SingleOrDefault() pois este método só pega o item se ele for Single (ou único), vi duas respostas nas discussões, em que falaram para trocar esse método para o método FirstOrDefault(), a aplicação roda com esta modificação, mas esse método pega o PRIMEIRO ITEM, mesmo se tiver duplicações, ou seja, o banco continua poluído, mas o código funciona pois pega somente o primeiro item.

Resolução definitiva: Deletar o banco de dados e deixar a aplicação criar ele novamente, com os 65 itens dentro do JSON.

Como fazer?

1 - Com o Visual Studio Community aberto, vá no menu superior, clique em Exibir, procure o SQL Server Object Explorer e abra ele, em seguida expanda o SQL SERVER clique com o botão direito do mouse no primeiro item chamado (localdb)MSSQLLocalDB e depois clique em New Query, isso vai abrir uma espécie de terminal do SQL para acessar o banco.

2 - Com o terminal aberto, verifique que no menu superior tem alguns botões como: Execute, Parse, entre outros, mais ao lado tem um menu Dropdown escrito master, ali você seleciona as Available Databases, clique no menu Dropdown e selecione o seu banco da aplicação, se for igual ao do curso, é o CasaDoCodigo.

3 - Com o banco certo selecionado, agora você pode colocar na linha a query seguinte:

delete from Produto

Clique no ícone verde chamado Execute para executar a query, ela vai deletar os dados de Produto no banco, que é onde foi duplicado devido ao erro no código.

Após rodar a query, escreva outra query onde vamos verificar se os produtos foram devidamente deletados do banco. Query abaixo, rode ela depois de escrever:

select * from Produto

Se não aparecer nenhum item depois de ter executado a query, é porque os produtos foram deletados do banco com sucesso.

4 - Feche esse terminal e rode a sua aplicação usando o F5, o código vai criar novamente as tabelas com os respectivos produtos do JSON, para conferir se os 65 produtos do JSON subiram pro banco é só você abrir novamente o menu Exibir, clique em SQL Server Object Explorer, dar um refresh, e vá expandindo SQL Server -> (localdb) -> Databases -> CasaDoCodigo -> Tables -> navegue até dbo.Produto -> clique com o botão direito do mouse em dbo.Produto e clique em View Data, pronto, aparecerá todos os 65 produtos corretos. Assim você pode manter o método SingleOrDefault() pois o seu banco está novo em folha.

Espero ter ajudado!

1 resposta
solução!

Ou abra o SQL Server Object Explorer > databases . btn direito no banco 'CasaDoCodigo' e em seguida 'delete' no menu suspenso.