171 votes

La valeur ne peut pas être nulle. Nom du paramètre : source

C'est probablement le plus gros problème de perte de temps que j'ai passé des heures à résoudre depuis longtemps.

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();

Cela me donne une erreur de

La valeur ne peut pas être nulle. Nom du paramètre : source

le suivi de pile de

ArgumentNullException : Value cannot be null [Nom du paramètre : source]. System.Linq.Enumerable.Any(IEnumerable 1 source, Func 2 prédicat) +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 ... ...

Je veux juste ajouter une entité à la table. L'ORM est EF.

248voto

Martin Mulder Points 5326

Quelque part dans le DbContext se trouve une valeur qui est IEnumerable et est interrogé avec Any() (ou Where() ou Select() ou toute autre méthode LINQ), mais cette valeur est null .

Découvrez si vous avez mis en place une requête (quelque part en dehors de votre code d'exemple) dans laquelle vous utilisez une méthode LINQ, ou que vous avez utilisé une méthode IEnumerable comme paramètre qui est NULL.

51voto

anaximander Points 2554

J'ai eu cette question il y a quelque temps, et la réponse n'est pas nécessairement celle que l'on attend. Ce message d'erreur apparaît souvent lorsque votre chaîne de connexion est incorrecte.

A vue de nez, vous aurez besoin de quelque chose comme ça :

<connectionStrings>
    <add name="hublisherEntities" connectionString="Data Source=localhost;Initial Catalog=hublisher;Integrated Security=True;" providerName="System.Data.SqlClient" />
</connectionStrings>
<entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
        <parameters>
            <parameter value="Data Source=localhost;Initial Catalog=hublisher;Integrated Security=True" />
        </parameters>
    </defaultConnectionFactory>
</entityFramework>

Ce qui se passe, c'est qu'il cherche une source de données au mauvais endroit ; Entity Framework le spécifie de manière légèrement différente. Si vous postez votre chaîne de connexion et votre configuration EF, nous pourrons vérifier.

18voto

SumNone Points 454

Je viens d'obtenir cette erreur exacte dans .Net Core 2.2 Entity Framework parce que je n'avais pas l'option set; dans mon DbContext comme ça :

public DbSet<Account> Account { get; }

changé en :

public DbSet<Account> Account { get; set;}

Cependant, l'exception n'est apparue qu'au moment où j'ai essayé d'utiliser une requête linq avec Where() y Select() comme d'autres l'ont mentionné plus haut.

J'essayais de mettre le DbSet en lecture seule. Je vais continuer à essayer...

14voto

Goku Points 200

J'ai appelé Count sur une instance de DbSet avec un filtre de null, c'est-à-dire que j'ai appelé Count sur une instance de DbSet avec un filtre de null.

dbSet.Count(null);

J'ai découvert que le passage de null ici causait l'erreur, donc j'appelle maintenant la méthode sans paramètre si le filtre est null :

 if (filter == null)
 {
     return dbSet.Count();
 }
 else
 {
     return dbSet.Count(filter);
 }

Cela a réglé le problème pour moi. Ce problème peut également se poser pour d'autres méthodes de DbSet.

5voto

Jaan Points 353

Juste pour info, quelqu'un pourrait trouver cela utile. J'ai cherché cette erreur pendant presque 2 jours et j'étais toujours en train de penser à quelque chose de grand et de chercher les classes qui pourraient être le problème et finalement j'ai trouvé un problème très stupide et c'était dans mon code de balisage (HTML) dans mypage.ascx. le problème était que j'ai une <asp:EntityDataSource> et celle-ci a une propriété include et j'ai quelques autres tables listées ici et par erreur une table était là qui a été supprimée de la base de données récemment et je ne l'ai jamais remarqué et elle retourne null avec d'autres entités. J'ai simplement supprimé cette table stupide de la liste d'inclusion et tout va bien. J'espère que cela pourra aider quelqu'un.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X