C'est probablement le plus gros problème de perte de temps que j'ai passé des heures à résoudre pendant 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
trace de pile
[ArgumentNullException: la valeur ne peut pas être nulle. Nom du paramètre: source] System.Linq.Enumerable.Any (
1 source, Func
prédicat 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 ... ...
Je veux juste ajouter une entité à la table. L'ORM est EF.
c#
asp.net-mvc
entity-framework
Danielovich
la source
la source
Réponses:
J'ai eu celui-ci il y a quelque temps, et la réponse n'est pas nécessairement celle à laquelle vous vous attendez. Ce message d'erreur apparaît souvent lorsque votre chaîne de connexion est incorrecte.
Au bout du compte, vous aurez besoin de quelque chose comme ceci:
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 votre configuration EF, nous pouvons vérifier.
la source
Quelque part dans le DbContext se trouve une valeur qui est
IEnumerable
et est interrogée avecAny()
(ouWhere()
ouSelect()
ou toute autre méthode LINQ), mais cette valeur l'estnull
.Découvrez si vous avez mis une requête ensemble (quelque part en dehors de votre exemple de code) où vous utilisez une méthode LINQ, ou que vous avez utilisé un
IEnumerable
comme paramètre qui est NULL.la source
.Where()
- elle l'était toujoursnull
.Ma raison était différente du reste ici, alors j'ai pensé que je le publierais pour quiconque pourrait avoir ce problème.
J'appelais Count sur une instance de DbSet avec un filtre de null ie
J'ai trouvé que passer null ici provoquait l'erreur, alors j'appelle maintenant la méthode sans paramètre si le filtre est nul:
Cela a réglé le problème pour moi. Cela peut également être un problème pour toutes les autres méthodes sur DbSet.
la source
Je viens de recevoir cette erreur exacte dans .Net Core 2.2 Entity Framework car je n'avais pas le
set;
dans monDbContext
genre:changé en:
Cependant, il n'a montré l'exception que lorsque j'ai essayé d'utiliser une requête linq avec
Where()
etSelect()
comme d'autres l'ont mentionné ci-dessus.J'essayais de définir le
DbSet
comme lecture seule. Je vais continuer à essayer...la source
tout comme un FYI, quelqu'un peut le trouver utile. Je cherchais ma queue pour cette erreur près de 2 jours et je pensais toujours à quelque chose de grand et cherchais les classes qui pourraient être le problème et finalement je l'ai trouvé très stupide et c'était dans mon code de balisage (HTML) dans mypage.ascx . le problème était que j'avais un
<asp:EntityDataSource>
et cela a une propriété include et j'ai quelques autres tables répertoriées ici et par erreur une table était là qui a été supprimée de la base de données récemment et je n'ai jamais remarqué et elle retournait null avec d'autres entités. Je viens de supprimer la table stupide de la liste d'inclusion et je suis prêt à partir. j'espère que cela peut aider quelqu'un.la source
Au cas où quelqu'un d'autre se retrouverait ici avec mon problème avec une configuration DB First Entity Framework.
En bref, j'avais besoin de surcharger le constructeur Entities pour accepter une chaîne de connexion, la raison étant 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 comme 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. Ainsi, le constructeur sans paramètre généré automatiquement ressemblait à ceci:
Et ma nouvelle surcharge ressemblait à ceci:
La solution était d'ajouter ces initialiseurs dont le code généré automatiquement prend en charge, une simple étape manquée:
Cela m'a vraiment jeté pour une boucle parce que 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 lançaient l'erreur d'exécution décrite dans l'OP.
la source
Assurez-vous que vous injectez le référentiel dans le constructeur du service. Cela a résolu le problème pour moi. :: claque le front ::
la source
Cette exception sera renvoyée si vous essayez de compter les valeurs dans une collection nulle.
Par exemple, le code ci-dessous fonctionne lorsque Error n'est pas nul, mais si Errors est nul, la valeur ne peut pas être nulle. Nom du paramètre: une exception source se produit.
Cette exception peut être évitée en vérifiant la valeur null à la place.
la source
Résolu avec la solution suivante
edmx
fichier, sélectionnez Ouvrir avec, éditeur XMLedmx:StorageModels
élémentDefiningQuery
entièrement lestore:Schema="dbo"
enSchema="dbo"
(s'il existe)store:Name
propriétéla source
Cela pourrait être aussi idiot que dans mon cas où savechanges a commis une erreur bcoz la base de données n'avait pas de clés étrangères et des associations ont été ajoutées aux tables EDM. J'ai ajouté des clés étrangères dans la base de données et régénéré EDM 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] (
1 source, Func
prédicat IEnumerable 2)Cas 2 -> lors de l'utilisation d'ObjectContext pour EDM Message = Impossible de mettre à jour l'EntitySet 'Contact' car il a un DefiningQuery et aucun élément n'existe dans l'élément pour prendre en charge l'opération en cours.
(Je voulais juste le jeter là-dedans au cas où cela aiderait quelqu'un).
la source
Dans MVC, l'écran d'affichage appelle la méthode qui se trouve dans Controller ou Repository.cs et attribue une valeur de retour à n'importe quel contrôle dans CSHTML mais cette méthode n'est en fait pas implémentée dans .cs / controller, puis CSHTML lèvera l'exception de paramètre NULL
la source
J'ai eu cette erreur lorsque j'avais un type non valide pour une propriété d'entité.
Lorsque j'ai supprimé la propriété, l'erreur a cessé de se produire.
la source
Dans mon cas, le problème est survenu lors de la configuration de l'application Web sur IIS.Lorsque la commande de mise à jour sur un enregistrement a été déclenchée, cette erreur a été générée.
C'était un problème d'autorisation sur App_Data qui était en lecture seule. Cliquez avec le bouton droit sur le dossier, décochez la case Lecture seule et vous avez terminé. À propos, à des fins de test, j'utilisais la base de données localdb qui se trouvait dans le dossier App_Data.
la source
Mon erreur a été d'oublier d'ajouter le .ThenInclude (s => s.SubChildEntities) sur le parent .Include (c => c.SubChildEntities) à l'action Controller lors de la tentative d'appeler les SubChildEntities dans la vue Razor.
Il convient de noter que IntelliSense de Visual Studio 2017 Community ne récupère pas l'objet SubChildEntities dans l'expression lambda dans le .ThenInclude (). Cependant, il compile et s'exécute avec succès.
la source
Je sais que c'est loin de l'année 2013 de la question, mais ce symptôme peut apparaître si le chargement différé n'est pas activé lors de la migration d'une application ASP.NET 5 vers ASP.NET Core, puis en essayant de mettre à niveau vers Entity Framework Core 2.x (à partir d'EF 6). Entity Framework Core a déplacé la prise en charge du proxy de chargement différé vers un package distinct , vous devez donc l'installer.
Cela est particulièrement vrai si tout ce que vous avez chargé est un package Entity Framework Core Sql Server (qui active Entity Framework très bien).
Après avoir installé le package de proxies, puis, comme le disent les documents,
.UseLazyLoadingProxies()
appelez le générateur d'options DbContext (dans votre section de configuration de démarrage DI, ou partout où vous configurez votre DbContext), et la propriété de navigation qui lançait l'exception ci-dessus cessera de la lancer, et fonctionnera comme Entity Framework 6.la source
J'ai eu le même problème avec XUnit. Le problème était avec ma connexion à la base de données. Vérifiez que votre chaîne de connexion est correcte ou non.
la source
Et, dans mon cas, je définis à tort mes deux colonnes différentes comme des identités sur les configurations DbContext comme ci-dessous,
Quand je le corrige comme ci-dessous,
Je me suis également débarrassé de cette erreur.
la source
Prenez une ligne dans la base de données et rendez toute la colonne nulle dans cette ligne comme ceci "NULL". Passez maintenant cette valeur NULL en utilisant try catch ou if else.
la source