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.

4voto

Shadi Namrouti Points 1453

Utilisation de la .Count() sans vérifier si null est une raison importante de cette erreur.

LA CORRECTION :

if(someList != null & someList.Count()>0)
{
    //Now, put your hackable code here!
}

3voto

Franklin Tarter Points 1089

Au cas où quelqu'un d'autre se retrouverait ici avec mon problème avec une configuration DB First Entity Framework.

Pour faire court, j'avais besoin de surcharger le constructeur Entities pour qu'il accepte une chaîne de connexion, la raison étant la possibilité d'utiliser le conteneur d'injection de dépendance Asp.Net Core en tirant la chaîne de connexion de appsettings.json, plutôt que de l'obtenir par magie du fichier App.config lors de l'appel du constructeur sans paramètre.

J'ai oublié d'ajouter les appels pour initialiser mes DbSets dans la nouvelle surcharge. Donc le constructeur sans paramètre généré automatiquement ressemblait à quelque chose comme ça :

    public MyEntities()
        : base("name=MyEntity")
    {
        Set1 = Set<MyDbSet1>();
        Set2 = Set<MyDbSet2>();
    }

Et ma nouvelle surcharge ressemblait à ça :

    public MyEntities(string connectionString)
        : base(connectionString)
    {
    }

La solution était d'ajouter ces initialisateurs dont le code généré automatiquement se charge, une simple étape manquée :

     public MyEntities(string connectionString)
        : base(connectionString)
    {
        Set1 = Set<MyDbSet1>();
        Set2 = Set<MyDbSet2>();
    }

Cela m'a vraiment pris au dépourvu car certains appels dans notre référentiel qui utilisaient le DbContext fonctionnaient bien (ceux qui n'avaient pas besoin de ces DBSets initialisés), et les autres provoquaient l'erreur d'exécution décrite dans l'OP.

3voto

Daniel de Zwaan Points 172

Cette exception sera renvoyée si vous tentez de compter des valeurs dans une collection nulle.

Par exemple, l'exemple ci-dessous fonctionne lorsque Errors n'est pas nul, mais si Errors est nul, la fonction La valeur ne peut pas être nulle. Nom du paramètre : source l'exception se produit.

if (graphQLResponse.Errors.Count() > 0)

Cette exception peut être évitée en vérifiant la présence de null à la place.

if (graphQLResponse.Errors != null)

2voto

KennethDale1 Points 93

Assurez-vous que vous injectez le référentiel dans le constructeur du service. Cela a résolu le problème pour moi ::smacks forehead: :

2voto

Jared G. Points 79

Mon erreur a été d'oublier d'ajouter le .ThenInclude(s => s.SubChildEntities) sur le parent .Include(c => c.SubChildEntities) à l'action du contrôleur lors de la tentative d'appeler les SubChildEntities dans la vue Razor.

var <parent> = await _context.Parent
            .Include(c => c.<ChildEntities>)
            .ThenInclude(s => s.<SubChildEntities>)
            .SingleOrDefaultAsync(m => m.Id == id);

Il convient de noter que l'IntelliSense de Visual Studio 2017 Community ne détecte pas l'objet SubChildEntities dans l'expression lambda de la fonction .ThenInclude(). Il compile et exécute cependant avec succès.

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