Este é provavelmente o maior problema de perda de tempo que passei horas resolvendo por um longo tempo.
var db = new hublisherEntities();
establishment_brands est = new establishment_brands();
est.brand_id = 1;
est.establishment_id = 1;
est.price = collection["price"];
est.size = collection["size"];
db.establishment_brands.Add(est);
db.SaveChanges();
Isso me dá um erro de
Valor não pode ser nulo. Nome do parâmetro: source
stacktrace de
[ArgumentNullException: o valor não pode ser nulo. Nome do parâmetro: source] System.Linq.Enumerable.Any (
1 source, Func
predicado IEnumerable 2) +4083335 System.Data.Entity.Internal.InternalContext.WrapUpdateException (UpdateException updateException) +87
System.Data.Entity.Internal.InternalContext.SaveChanges () + 193
System.Data.Entity.Internal.LazyInternalContext.SaveChanges () +33
System.Data.Entity.DbContext.SaveChanges () +20 ... ...
Eu só quero adicionar uma entidade à tabela. O ORM é EF.
c#
asp.net-mvc
entity-framework
danielovich
fonte
fonte
Respostas:
Eu tinha esse há um tempo, e a resposta não é necessariamente o que você esperaria. Essa mensagem de erro geralmente aparece quando a string de conexão está incorreta.
No palpite, você precisará de algo assim:
O que está acontecendo é que ele está procurando uma fonte de dados no lugar errado; O Entity Framework especifica um pouco diferente. Se você publicar sua string de conexão e a configuração EF, podemos verificar.
fonte
Em algum lugar dentro do DbContext há um valor que é
IEnumerable
e é consultado comAny()
(Where()
ouSelect()
ou qualquer outro método LINQ), mas esse valor énull
.Descubra se você montou uma consulta (em algum lugar fora do código de exemplo) em que está usando um método LINQ ou se usou
IEnumerable
um parâmetro como NULL.fonte
.Where()
- ainda estavanull
.Meu motivo era diferente do resto aqui, então pensei em publicá-lo para qualquer pessoa que possa ter esse problema.
Eu estava chamando Count em uma instância do DbSet com um filtro nulo ou seja
Descobri que a passagem de nulo aqui estava causando o erro, por isso agora chamo o método sem parâmetros se o filtro for nulo:
Isso resolveu o problema para mim. Isso pode ser um problema para outros métodos no DbSet também.
fonte
Eu só tenho esse erro exata em .Net Núcleo 2.2 Entity Framework, porque eu não tinha a
set;
no meuDbContext
assim:alterado para:
No entanto, ele não mostrou a exceção até que tentei usar uma consulta linq com
Where()
eSelect()
como outras pessoas mencionaram acima.Eu estava tentando definir o
DbSet
como somente leitura. Vou continuar tentando ...fonte
assim como um FYI, alguém pode achar útil. Eu estava perseguindo meu rabo por esse erro quase 2 dias e estava sempre pensando em algo grande e procurando as classes que poderiam ser o problema. Finalmente, achei o problema muito estúpido e estava no meu código de marcação (HTML) em mypage.ascx . o problema era que eu tenho um
<asp:EntityDataSource>
e isso tem uma propriedade include e eu tenho algumas outras tabelas listadas aqui e por engano havia uma tabela que foi excluída do banco de dados recentemente e eu nunca notei e ele retornou nulo com outras entidades. Acabei de remover a tabela estúpida da lista de inclusão e estou pronto para ir. espero que isso possa ajudar alguém.fonte
Caso alguém mais acabe aqui com o meu problema com uma instalação do DB First Entity Framework.
Para encurtar a história, eu precisava sobrecarregar o construtor Entities para aceitar uma cadeia de conexão, o motivo é a capacidade de usar o contêiner de injeção de dependência do Asp.Net Core retirando a cadeia de conexão de appsettings.json, em vez de obtê-la magicamente no App.config ao chamar o construtor sem parâmetros.
Esqueci de adicionar as chamadas para inicializar meus DbSets na nova sobrecarga. Portanto, o construtor gerado sem parâmetros e gerado automaticamente se parecia com isso:
E minha nova sobrecarga ficou assim:
A solução foi adicionar os inicializadores que o código gerado automaticamente cuida, uma simples etapa perdida:
Isso realmente me impressionou, porque algumas chamadas em nosso repositório que usavam o DbContext funcionaram bem (aquelas que não precisavam dos DBSets inicializados) e outras lançaram o erro de tempo de execução descrito no OP.
fonte
Certifique-se de injetar o repositório no construtor do serviço. Isso resolveu para mim. :: cheira testa ::
fonte
Essa exceção será retornada se você tentar contar valores em uma coleção nula.
Por exemplo, o abaixo funciona quando Erros não é nulo, no entanto, se Erros for nulo, o Valor não poderá ser nulo. Nome do parâmetro: ocorre uma exceção de origem .
Essa exceção pode ser evitada verificando-se nulo.
fonte
Resolvido com a seguinte solução
edmx
arquivo, selecione Abrir com, editor XMLedmx:StorageModels
elementoDefiningQuery
completamentestore:Schema="dbo"
paraSchema="dbo"
(se existir)store:Name
propriedadefonte
Poderia ser tão tolo quanto no meu caso, onde as alterações de saves estavam errando bcoz, o db não tinha chaves estrangeiras e associações foram adicionadas às tabelas EDM. Adicionei chaves estrangeiras no banco de dados e registei o EDM para uma correção.
Os erros que eu estava vendo são os seguintes: Caso 1 -> ao usar DBContext para EDM Message = Value não pode ser nulo. Nome do parâmetro: source em System.Linq.Enumerable.Any [TSource] (
1 source, Func
predicado IEnumerable 2)Caso 2 -> ao usar o ObjectContext para EDM Message = Não é possível atualizar o EntitySet 'Contact' porque ele possui um DefiningQuery e nenhum elemento existe no elemento para oferecer suporte à operação atual.
(Só queria jogá-lo lá no caso de ajudar alguém).
fonte
No MVC, a tela View está chamando o método que está no Controller ou Repository.cs e atribuindo valor de retorno a qualquer controle no CSHTML, mas esse método não é realmente implementado no .cs / controller, então o CSHTML lançará a exceção do parâmetro NULL
fonte
Eu recebi esse erro quando tinha um tipo inválido para uma propriedade de entidade.
Quando removi a propriedade, o erro parou de ocorrer.
fonte
No meu caso, o problema apareceu ao configurar o aplicativo Web no IIS. Quando o comando update em qualquer registro foi acionado, esse erro foi gerado.
Foi um problema de permissão no App_Data que foi definido como somente leitura. Clique com o botão direito do mouse na pasta, desmarque a caixa de seleção Somente leitura e pronto. A propósito, para fins de teste, eu estava usando o banco de dados localdb que estava na pasta App_Data.
fonte
Meu erro foi esquecer de adicionar o .ThenInclude (s => s.SubChildEntities) ao pai .Include (c => c.SubChildEntities) à ação Controller ao tentar chamar o SubChildEntities na visualização Razor.
Deve-se observar que o IntelliSense da Comunidade do Visual Studio 2017 não seleciona o objeto SubChildEntities na expressão lambda no .ThenInclude (). Porém, ele compila e executa com sucesso.
fonte
Sei que esse é um longo caminho desde o ano de 2013 da pergunta, mas esse sintoma pode aparecer se você não tiver o carregamento lento ativado ao migrar um aplicativo ASP.NET 5 para o ASP.NET Core e tentar atualizar para Entity Framework Core 2.x (da EF 6). O Entity Framework Core mudou o suporte a proxy de carregamento lento para um pacote separado , portanto você precisa instalá-lo.
Isso é particularmente verdadeiro se tudo o que você carregou é um pacote do Entity Framework Core Sql Server (que ativa o Entity Framework muito bem).
Depois de instalar o pacote de proxies, invoque
.UseLazyLoadingProxies()
o construtor de opções do DbContext (na seção Configuração da DI de inicialização ou onde quer que você configure o DbContext), e a propriedade de navegação que estava lançando a exceção acima parará de lançá-lo, e funcionará como o Entity Framework 6 costumava.fonte
Eu tive o mesmo problema com o XUnit. O problema estava com minha conexão com o banco de dados. Verifique se a seqüência de conexão está correta ou não.
fonte
E, no meu caso, defini por engano minhas duas colunas diferentes como identidades nas configurações do DbContext, como abaixo,
Quando eu o corrijo como abaixo,
Eu também me livrei desse erro.
fonte
Pegue uma linha no banco de dados e torne toda a coluna nula nessa linha como este "NULL". Agora, passe esse valor NULL usando try catch ou se houver outra coisa.
fonte