webentwicklung-frage-antwort-db.com.de

Der Wert kann nicht Null sein. Parametername: Quelle

Dies ist wahrscheinlich das größte Zeitverschwendungsproblem, das ich seit langer Zeit 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();

Das gibt mir einen Fehler von

Der Wert kann nicht Null sein. Parametername: Quelle

stacktrace von

[ArgumentNullException: Wert darf nicht null sein. Parametername: Quelle] System.Linq.Enumerable.Any (IEnumerable1 source, Func2 Prädikat) +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. Der ORM ist EF.

105
danielovich

Ich hatte dies vor einer Weile, und die Antwort ist nicht unbedingt das, was Sie erwarten würden. Diese Fehlermeldung wird häufig angezeigt, wenn Ihre Verbindungszeichenfolge falsch ist.

Vermutlich benötigen Sie Folgendes:

<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>

Was passiert, ist, dass nach einer Datenquelle am falschen Ort gesucht wird. Entity Framework gibt es etwas anders an. Wenn Sie Ihre Verbindungszeichenfolge und EF-Konfiguration posten, können wir dies überprüfen.

36
anaximander

Irgendwo im DbContext befindet sich ein Wert, der IEnumerable ist und mit Any() (oder Where() oder Select() oder einer anderen LINQ-Methode abgefragt wird.) , aber dieser Wert ist null.

Finden Sie heraus, ob Sie eine Abfrage zusammenstellen (irgendwo außerhalb Ihres Beispielcodes), bei der Sie eine LINQ-Methode verwenden, oder ob Sie IEnumerable als Parameter verwendet haben, der NULL ist.

149
Martin Mulder

Mein Grund war anders als der Rest hier, also dachte ich, ich würde es für jeden anderen posten, der dieses Problem haben könnte.

Ich habe Count für eine Instanz von DbSet mit einem Filter von null aufgerufen, d. H.

dbSet.Count(null);

Ich fand heraus, dass das Übergeben von null hier den Fehler verursachte. Daher rufe ich jetzt die parameterlose Methode auf, wenn der Filter null ist:

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

Dies hat das Problem für mich gelöst. Dies kann auch ein Problem für andere Methoden in DbSet sein.

10
Guy Lowe

gerade als eine FYI kann jemand es nützlich finden. Ich habe meinen Schwanz für diesen Fehler fast 2 Tage lang gejagt und mir immer etwas Großes überlegt und nach den Klassen gesucht, die das Problem sein könnten, und schließlich fand ich es sehr dumm und es war in meinem Markup-Code (HTML) in mypage.ascx . das Problem war, ich habe ein <asp:EntityDataSource> und dies hat eine include-Eigenschaft und ich habe einige andere Tabellen hier aufgelistet und fälschlicherweise war eine Tabelle da, die kürzlich aus der Datenbank gelöscht wurde, und ich habe nie bemerkt, dass sie bei anderen Entitäten null zurückgibt. Ich habe gerade die dumme Tabelle aus der Include-Liste entfernt und es kann losgehen. hoffe das kann jemandem helfen.

3
johnny

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, dass der Asp.Net Core-Container für die Abhängigkeitsinjektion die Verbindungszeichenfolge aus appsettings.json ziehen konnte, anstatt sie magisch 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 Konstruktor ohne Parameter sah also ungefähr so ​​aus:

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

Und meine neue Überladung sah so aus:

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

Die Lösung bestand darin, die Initialisierer hinzuzufügen, um die sich der automatisch generierte Code kümmert.

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

Dies warf mich wirklich für eine Schleife, weil einige Aufrufe in unserem Respository, die den DbContext verwendeten, einwandfrei funktionierten (diejenigen, die diese initialisierten DBSets nicht benötigten), und die anderen den im OP beschriebenen Laufzeitfehler auslösten.

2
Franklin Tarter

Mit folgender Lösung gelöst

  1. Klicken Sie mit der rechten Maustaste auf die edmx-Datei und wählen Sie Öffnen mit, XML-Editor
  2. Suchen Sie die Entität im Element edmx: StorageModels
  3. Entfernen Sie die DefiningQuery vollständig
  4. Benennen Sie den Speicher um: Schema = "dbo" zu Schema = "dbo" (falls vorhanden)
  5. Entfernen Sie die Eigenschaft store: Name
1
Ahmedk

Stellen Sie sicher, dass Sie das Repository in den Konstruktor des Dienstes einfügen. Das hat es für mich gelöst. :: schmatzt auf die Stirn ::

1
KennethDale1

Nehmen Sie eine Zeile in die Datenbank und machen Sie alle Spalten in dieser Zeile zu Null, wie dies "NULL". Übergeben Sie diesen NULL-Wert jetzt mit try catch oder wenn sonst.

0
Jarin Farhad

In MVC ruft der Bildschirm "Ansicht" eine Methode auf, die sich in "Controller" oder "Repository.cs" befindet, und weist einem Steuerelement in CSHTML einen Rückgabewert zu, diese Methode ist jedoch in ".cs/controller" nicht implementiert. In diesem Fall löst CSHTML die NULL-Parameterausnahme aus

0

Ich weiß, dass dies ein langer Weg vom Jahr 2013 der Frage ist, aber dieses Symptom kann auftreten, wenn beim Migrieren einer ASP.NET 5-App zu ASP.NET Core und anschließenden Aktualisieren auf nicht verzögertes Laden aktiviert ist 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 , daher müssen Sie es installieren.

Dies gilt insbesondere dann, wenn Sie lediglich ein Entity Framework Core SQL Server-Paket geladen haben (wodurch Entity Framework einwandfrei aktiviert wird).

Rufen Sie nach der Installation des Proxy-Pakets, wie in den Dokumenten angegeben, .UseLazyLoadingProxies() im Builder für DbContext-Optionen (im Setup-Abschnitt von Startup DI oder wo immer Sie Ihren DbContext konfigurieren) und in der Navigationseigenschaft auf, die die ausgelöst hat Die obige Ausnahme beendet das Auslösen und funktioniert wie Entity Framework 6.

0
Michael Rivera

Mein Fehler war, dass ich vergessen habe, die .ThenInclude (s => s.SubChildEntities) der übergeordneten .Include (c => c.SubChildEntities) der Controller-Aktion hinzuzufügen, als ich versuchte, die SubChildEntities in der Razor-Ansicht aufzurufen.

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

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.

0
Jared G.

Es könnte so albern sein wie in meinem Fall, in dem Speicheränderungen fehlschlugen, da die Datenbank keine Fremdschlüssel hatte und Zuordnungen zu EDM-Tabellen hinzugefügt wurden. Ich habe Fremdschlüssel in die Datenbank eingefügt und EDM für einen Fix neu generiert.

Die Fehler, die ich gesehen habe, sind wie folgt: Fall 1 -> bei Verwendung von DBContext für EDM-Nachricht = Wert kann nicht null sein. Parametername: Quelle bei System.Linq.Enumerable.Any [TSource] (IEnumerable1 source, Func2 Prädikat)

Fall 2 -> bei Verwendung von ObjectContext für EDM Message = 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.

(Wollte es nur dort reinwerfen, falls es jemandem hilft).

0
cunderpants

Ich habe diesen Fehler erhalten, als ich einen ungültigen Typ für eine Entitätseigenschaft hatte.

public Type ObjectType {get;set;}

Als ich die Eigenschaft entfernte, hörte der Fehler auf aufzutreten.

0
Kirsten Greed

In meinem Fall trat das Problem beim Konfigurieren der Webanwendung auf 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 auf schreibgeschützt gesetzt war. Klicken Sie mit der rechten Maustaste auf den Ordner, deaktivieren Sie das Kontrollkästchen Schreibgeschützt, und fertig. Übrigens habe ich zu Testzwecken die localdb-Datenbank verwendet, die sich im Ordner App_Data befand.

0
Sunil Jatolia

Ich habe gerade genau diesen Fehler in .NET Core 2.2 Entity Framework erhalten, weil ich in meinem DbContext nicht den folgenden set; Hatte:

public DbSet<Account> Account { get; }

gewechselt zu:

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

Die Ausnahme wurde jedoch erst angezeigt, als ich versuchte, eine linq-Abfrage mit Where() und Select() zu verwenden, wie andere oben erwähnt hatten.

Ich habe versucht, DbSet als schreibgeschützt festzulegen. Ich werde es weiter versuchen ...

0
Sum None