Dies ist wahrscheinlich die größte Zeitverschwendung, die ich seit langem stundenlang gelöst habe.
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();
Dies gibt mir einen Fehler von
Der Wert kann nicht Null sein. Parametername: Quelle
Stapelspur von
[ArgumentNullException: Wert kann nicht null sein. Parametername: Quelle] System.Linq.Enumerable.Any (
1 source, Func
Prädikat 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 ... ...
Ich möchte der Tabelle nur eine Entität hinzufügen. Das ORM ist EF.
c#
asp.net-mvc
entity-framework
Danielovich
quelle
quelle
Antworten:
Ich hatte diese vor einiger Zeit und die Antwort ist nicht unbedingt das, was Sie erwarten würden. Diese Fehlermeldung wird häufig angezeigt, wenn Ihre Verbindungszeichenfolge falsch ist.
Vermutlich brauchen Sie so etwas:
Was passiert ist, dass es nach einer Datenquelle am falschen Ort sucht; Entity Framework gibt es etwas anders an. Wenn Sie Ihre Verbindungszeichenfolge und EF-Konfiguration veröffentlichen, können wir dies überprüfen.
quelle
Irgendwo innerhalb der DbContext ein Wert ist , ist
IEnumerable
und ist mit abgefragtAny()
(oderWhere()
oderSelect()
oder einem beliebigen anderem LINQ-Verfahren), aber dieser Wert istnull
.Finden Sie heraus, ob Sie eine Abfrage (irgendwo außerhalb Ihres Beispielcodes) zusammengestellt haben, in der Sie eine LINQ-Methode verwenden, oder ob Sie eine
IEnumerable
als Parameter verwendet haben, die NULL ist.quelle
.Where()
- es war immer nochnull
.Mein Grund war anders als der Rest hier, also dachte ich, ich würde es für alle anderen posten, die dieses Problem haben könnten.
Ich habe Count für eine Instanz von DbSet mit einem Filter von null aufgerufen, d. H.
Ich habe festgestellt, dass das Übergeben von null hier den Fehler verursacht hat. Daher rufe ich jetzt die parameterlose Methode auf, wenn der Filter null ist:
Dies hat das Problem für mich gelöst. Dies kann auch für andere Methoden in DbSet ein Problem sein.
quelle
Ich habe genau diesen Fehler in .Net - Core 2.2 Entity Framework , weil ich nicht das habe
set;
in meinemDbContext
etwa so:gewechselt zu:
Die Ausnahme wurde jedoch erst angezeigt, als ich versuchte, eine Linq-Abfrage mit
Where()
undSelect()
wie bereits erwähnt zu verwenden.Ich habe versucht, das
DbSet
als schreibgeschützt einzustellen . Ich werde es weiter versuchen ...quelle
Nur als FYI kann es jemand nützlich finden. Ich habe fast 2 Tage lang meinen Schwanz nach diesem Fehler gejagt und immer etwas Großes gedacht und nach den Klassen gesucht, die das Problem sein könnten. Schließlich fand ich es sehr dumm und es war in meinem Markup (HTML) -Code in mypage.ascx . Das Problem war, dass ich eine habe
<asp:EntityDataSource>
und diese eine include-Eigenschaft hat und ich einige andere Tabellen hier aufgelistet habe und fälschlicherweise eine Tabelle vorhanden war, die kürzlich aus der Datenbank gelöscht wurde und die ich nie bemerkt habe und die bei anderen Entitäten null zurückgibt. Ich habe gerade die blöde Tabelle aus der Include-Liste entfernt und kann loslegen. hoffe, das kann jemandem helfen.quelle
Für den Fall, dass jemand anderes hier mit meinem Problem mit einem DB First Entity Framework-Setup endet.
Kurz gesagt, ich musste den Entities-Konstruktor überladen, um eine Verbindungszeichenfolge zu akzeptieren. Der Grund dafür war die Möglichkeit, den Asp.Net Core-Abhängigkeitsinjektionscontainer zu verwenden, der die Verbindungszeichenfolge aus appsettings.json abruft, anstatt sie auf magische Weise aus der App.config abzurufen Datei beim Aufruf des parameterlosen Konstruktors.
Ich habe vergessen, die Aufrufe hinzuzufügen, um meine DbSets in der neuen Überladung zu initialisieren. Der automatisch generierte parameterlose Konstruktor sah also ungefähr so aus:
Und meine neue Überlastung sah so aus:
Die Lösung bestand darin, die Initialisierer hinzuzufügen, für die der automatisch generierte Code sorgt, ein einfacher, fehlgeschlagener Schritt:
Dies warf mich wirklich in eine Schleife, da einige Aufrufe in unserem Respository, die den DbContext verwendeten, gut funktionierten (diejenigen, die diese initialisierten DBSets nicht benötigten), und die anderen den im OP beschriebenen Laufzeitfehler auslösen.
quelle
Stellen Sie sicher, dass Sie das Repository in den Konstruktor des Dienstes einfügen. Das hat es für mich gelöst. :: schlägt auf die Stirn ::
quelle
Diese Ausnahme wird zurückgegeben, wenn Sie versuchen, Werte in einer Nullsammlung zu zählen.
Das Folgende funktioniert beispielsweise, wenn Errors nicht null ist. Wenn Errors jedoch null ist, kann der Wert nicht null sein. Parametername: Quellausnahme tritt auf.
Diese Ausnahme kann vermieden werden, indem stattdessen auf null geprüft wird.
quelle
Mit der folgenden Lösung gelöst
edmx
Datei und wählen Sie Öffnen mit, XML-Editoredmx:StorageModels
ElementDefiningQuery
vollständigstore:Schema="dbo"
in umSchema="dbo"
(falls vorhanden)store:Name
Eigenschaftquelle
Es könnte so albern sein wie in meinem Fall, in dem Sicherungsänderungen fehlerhaft waren, weil die Datenbank keine Fremdschlüssel hatte und den EDM-Tabellen Zuordnungen hinzugefügt wurden. Ich habe Fremdschlüssel in die Datenbank eingefügt und EDM für eine Korrektur neu generiert.
Die Fehler, die ich gesehen habe, sind folgende: Fall 1 -> bei Verwendung von DBContext für EDM Message = Wert kann nicht null sein. Parametername: Quelle bei System.Linq.Enumerable.Any [TSource] (
1 source, Func
Prädikat IEnumerable 2)Fall 2 -> bei Verwendung von ObjectContext für EDM Message = Das EntitySet 'Contact' kann nicht aktualisiert werden, da es eine DefiningQuery enthält und kein Element im Element vorhanden ist, das den aktuellen Vorgang unterstützt.
(Ich wollte es nur da reinwerfen, falls es jemandem hilft).
quelle
In MVC ruft der View-Bildschirm eine Methode auf, die sich in Controller oder Repository.cs befindet, und weist jedem Steuerelement in CSHTML einen Rückgabewert zu. Diese Methode ist jedoch in .cs / controller nicht implementiert. Dann löst CSHTML die NULL-Parameterausnahme aus
quelle
Ich habe diesen Fehler erhalten, als ich einen ungültigen Typ für eine Entitätseigenschaft hatte.
Als ich die Eigenschaft entfernte, trat der Fehler nicht mehr auf.
quelle
In meinem Fall trat das Problem beim Konfigurieren der Webanwendung unter IIS auf. Als der Aktualisierungsbefehl für einen Datensatz ausgelöst wurde, wurde dieser Fehler generiert.
Es war ein Berechtigungsproblem für App_Data, das schreibgeschützt war. Klicken Sie mit der rechten Maustaste auf den Ordner, deaktivieren Sie das Kontrollkästchen Schreibgeschützt und Sie sind fertig. Übrigens habe ich zu Testzwecken die localdb-Datenbank verwendet, die sich im Ordner App_Data befand.
quelle
Mein Fehler bestand darin, zu vergessen, die .ThenInclude (s => s.SubChildEntities) zum übergeordneten .Include (c => c.SubChildEntities) zur Controller-Aktion hinzuzufügen, wenn versucht wurde, die SubChildEntities in der Razor-Ansicht aufzurufen.
Es ist zu beachten, dass IntelliSense von Visual Studio 2017 Community das SubChildEntities-Objekt im Lambda-Ausdruck in .ThenInclude () nicht aufnimmt. Es wird jedoch erfolgreich kompiliert und ausgeführt.
quelle
Ich weiß, dass dies ein langer Weg vom Jahr 2013 der Frage ist, aber dieses Symptom kann auftreten, wenn Sie das verzögerte Laden nicht aktiviert haben, wenn Sie eine ASP.NET 5-App auf ASP.NET Core migrieren und dann versuchen, ein Upgrade auf durchzuführen Entity Framework Core 2.x (ab EF 6). Entity Framework Core hat die Unterstützung für das verzögerte Laden von Proxys in ein separates Paket verschoben , sodass Sie es installieren müssen.
Dies gilt insbesondere dann, wenn Sie nur ein Entity Framework Core SQL Server-Paket geladen haben (das Entity Framework einwandfrei aktiviert).
.UseLazyLoadingProxies()
Rufen Sie nach der Installation des Proxy-Pakets, wie in den Dokumenten angegeben, den Builder für DbContext-Optionen auf (in Ihrem Startup DI-Setup-Abschnitt oder überall dort, wo Sie Ihren DbContext konfigurieren), und die Navigationseigenschaft, die die obige Ausnahme ausgelöst hat, wird nicht mehr ausgelöst. und wird wie früher Entity Framework 6 funktionieren.quelle
Ich hatte das gleiche Problem mit XUnit. Das Problem war mit meiner Datenbankverbindung. Überprüfen Sie, ob Ihre Verbindungszeichenfolge korrekt ist oder nicht.
quelle
Und in meinem Fall definiere ich meine zwei verschiedenen Spalten fälschlicherweise als Identitäten in DbContext-Konfigurationen wie unten.
Wenn ich es wie unten korrigiere,
Ich habe diesen Fehler auch beseitigt.
quelle
Nehmen Sie eine Zeile in die Datenbank und machen Sie die gesamte Spalte in dieser Zeile wie folgt "NULL". Übergeben Sie jetzt diesen NULL-Wert mit try catch oder if else.
quelle