Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Problema no Método Find - Pede chave primária e lança exceção System.ArgumentNullException: Valor não pode ser nulo.

Quando tento aplicar Iniciar Sem Depurar o seguinte código abaixo:

//contexto.Promocoes.Add(promocaoDePascoa);
var promocao = contexto.Promocoes.Find(18);
contexto.Promocoes.Remove(promocao);
contexto.SaveChanges();

Ocorre uma exceção ao compilar:

Executed DbCommand (2ms) [Parameters=[@__get_Item_0='?'], CommandType='Text', CommandTimeout='30']
SELECT TOP(1) [e].[Id], [e].[DataInicio], [e].[DataTermino], [e].[Descricao]
FROM [Promocoes] AS [e]
WHERE [e].[Id] = @__get_Item_0

Exceção Sem Tratamento: System.ArgumentNullException: Valor não pode ser nulo.
Nome do parâmetro: entity
   em Microsoft.EntityFrameworkCore.Utilities.Check.NotNull[T](T value, String parameterName)
   em Microsoft.EntityFrameworkCore.DbContext.Remove[TEntity](TEntity entity)
   em Microsoft.EntityFrameworkCore.Internal.InternalDbSet`1.Remove(TEntity entity)
   em Alura.Loja.Testes.ConsoleApp.Program.Main(String[] args) na C:\Alura.Loja.Testes.ConsoleApp\Program.cs:linha 38
Pressione qualquer tecla para continuar. . .

E a exceção ocorre na seguinte linha:

contexto.Promocoes.Remove(promocao);

Ou seja, esse argumento do Remove, o promocao, é essa variável aqui:

var promocao = contexto.Promocoes.Find(18);

Então julgo que o problema seja o argumento desse método Find, pois a exceção é System.ArgumentNullException: Valor não pode ser nulo. O argumento desse Find pede a chave primária, porém eu peguei a chave primária da tabela:

Promocao ID    Promocao ID
 18             19811
 18             19812           
 18             19813

Essa é minha tabela PromocaoProduto, e a chave primário é 18.

O que estou fazendo de errado?

2 respostas

Olá Lucas, tudo certo?

Tem como compartilhar seu projeto comigo via Dropbox, Google Drive ou pelo GitHub, assim posso dar uma olhada nele.

No aguardo!

solução!

Era problema com meu anti-vírus. haha O anti-vírus fazia com que a aplicação rodasse duas vezes (isso não me era problema antes, só veio a ser problema agora) pois rodando a aplicação duas vezes o método Remove() era chamado duas vezes dando um problemão. Tive que chamar meu irmão que é Programador para analisar o código e chegar nessa conclusão. Mas valeu a ajuda, Fabiano. Um abraço!