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


C'est probablement le plus grand 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

empilement de

[ArgumentNullException: la valeur ne peut pas être nulle. Nom du paramètre: source]   System.Linq.Enumerable.Any (IEnumerable1 source, Func2 prédicats)   +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.


78
2018-04-29 14:24


origine


Réponses:


Je l'ai eu il y a longtemps, et la réponse n'est pas nécessairement celle à laquelle vous vous attendez. Ce message d'erreur survient souvent lorsque votre chaîne de connexion est incorrecte.

Devinez, vous aurez besoin de quelque chose comme ceci:

<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 recherche une source de données au mauvais endroit; Entity Framework le spécifie légèrement différemment. Si vous publiez votre chaîne de connexion et la configuration EF, nous pouvons vérifier.


30
2018-04-29 14:43



Quelque part à l’intérieur de DbContext se trouve une valeur 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 mettez une requête ensemble (quelque part en dehors de votre code exemple) où vous utilisez une méthode LINQ, ou si vous avez utilisé une méthode IEnumerable comme paramètre NULL.


122
2018-04-29 14:32



Ma raison était différente du reste ici, donc je pensais le poster pour quiconque pourrait avoir ce problème.

J'appelais Count sur une instance de DbSet avec un filtre de null i.e.

dbSet.Count(null);

J'ai trouvé que passer null ici provoquait 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. Cela peut également poser problème pour d'autres méthodes sur DbSet.


9
2017-08-11 01:35



tout comme une FYI, quelqu'un peut le trouver utile. Je cherchais ma queue pour cette erreur presque 2 jours et pensais toujours à quelque chose de grand et à la recherche des classes qui pourraient être le problème et finalement j'ai trouvé le problème très stupide et il était dans mon code (HTML) dans mypage.ascx . le problème était que j'ai un <asp:EntityDataSource> et cela a une propriété include et j'ai d'autres tables listées ici et par erreur une table a été supprimée de la base de données récemment et je n'ai jamais remarqué et elle retourne null avec d'autres entités. Je viens de retirer le tableau stupide de la liste des inclusions et je suis prêt à partir. J'espère que cela peut aider quelqu'un.


3
2017-10-11 13:45



Résolu avec la solution suivante

1) Faites un clic droit sur le fichier edmx, sélectionnez Ouvrir avec, éditeur XML

2) Localiser l'entité dans l'élément edmx: StorageModels

3) Supprimez entièrement DefiningQuery

4) Renommez le magasin: Schema = "dbo" to Schema = "dbo" (s'il existe)

5) Supprimer le magasin: Nom de la propriété


1
2017-12-30 14:49



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

En bref, j'ai dû surcharger le constructeur Entities pour accepter une chaîne de connexion, en raison de la possibilité d'utiliser le conteneur d'injection de dépendances Asp.Net Core en tirant la chaîne de connexion de appsettings.json, plutôt que de l'obtenir par magie depuis App.config. fichier 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 à ceci:

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

Et ma nouvelle surcharge ressemblait à ceci:

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

La solution consistait à ajouter les initialiseurs pris en charge par le code généré automatiquement, une simple étape manquée:

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

Cela m'a vraiment poussé à faire une boucle car certains appels dans notre Respository qui utilisaient DbContext fonctionnaient bien (ceux qui n'avaient pas besoin de ces DBSets initialisés), et les autres lancent l'erreur d'exécution décrite dans l'OP.


1
2018-05-30 16:56



Cela pourrait être aussi bête que dans mon cas où les savechanges étaient des erreurs de bcoz, la base de données n'avait pas de clé étrangère et les associations étaient ajoutées aux tables EDM. J'ai ajouté des clés étrangères dans la base de données et l'EDM régénéré pour un correctif.

Les erreurs que je voyais sont les suivantes: Cas 1 -> lors de l'utilisation de DBContext pour EDM Message = La valeur ne peut pas être nulle. Nom du paramètre: source à System.Linq.Enumerable.Any [TSource] (IEnumerable1 source, Func2 prédicats)

Cas 2 -> lors de l'utilisation d'ObjectContext pour EDM Message = Impossible de mettre à jour EntitySet 'Contact' car il possède DefiningQuery et aucun élément n'existe dans l'élément pour prendre en charge l'opération en cours.

(Je voulais juste y jeter au cas où cela aiderait quelqu'un).


0
2017-10-24 14:18



Dans MVC, l'écran View appelle la méthode qui se trouve dans Controller ou Repository.cs et attribue une valeur de retour à tout contrôle dans CSHTML, mais cette méthode n'est en fait pas implémentée dans .cs / controller, CSHTML lançant l'exception de paramètre NULL


0
2018-01-15 21:06



J'ai eu cette erreur lorsque j'avais un type non valide pour une propriété d'entité.

public Type ObjectType {get;set;}

Lorsque j'ai supprimé la propriété, l'erreur a cessé de se produire.


0
2017-12-11 15:11