InvalidOperationException beim Aufruf von SaveChanges in .NET Entity Framework

.net c# entity-framework

Frage

Ich versuche zu lernen, wie man das Entity-Framework verwendet, aber ich habe ein Problem gefunden, das ich nicht lösen kann. Was ich mache ist, dass ich durch eine Liste von Filmen gehe, die ich besitze, und jede in eine einfache Datenbank einfügt.

Dies ist der Code, den ich verwende

private void AddMovies(DirectoryInfo dir)
{
    MovieEntities db = new MovieEntities();
    foreach (DirectoryInfo d in dir.GetDirectories())
    {
        Movie m = new Movie { Name = d.Name, Path = dir.FullName };
        db.AddToMovies(movie);
    }
    db.SaveChanges();
}

Wenn ich dies tue, bekomme ich eine Ausnahme bei db.SaveChanges (), die gelesen hat.

Die Änderungen an der Datenbank wurden erfolgreich festgeschrieben. Beim Aktualisieren des Objektkontexts ist jedoch ein Fehler aufgetreten. Der ObjectContext befindet sich möglicherweise in einem inkonsistenten Zustand. Innere Ausnahmemeldung: AcceptChanges kann nicht fortgesetzt werden, da die Schlüsselwerte des Objekts mit einem anderen Objekt im ObjectStateManager in Konflikt stehen. Stellen Sie sicher, dass die Schlüsselwerte eindeutig sind, bevor Sie AcceptChanges aufrufen.

Ich konnte nicht herausfinden, was dieses Problem verursacht. Meine Datenbanktabelle enthält drei Spalten
ID in autoincrement
Name nchar (255)
Pfad nchar (255)

Update: Ich habe meine edmx-Datei überprüft und der SSDL-Abschnitt hat das vorgeschlagene StoreGeneratedPattern = "Identity". Ich folgte auch dem Blogbeitrag und versuchte, ClientAutoGenerated = "true" und StoreGenerated = "true" in der CSDL hinzuzufügen, wie dort vorgeschlagen. Dies führte zu Kompilierungsfehlern (Fehler 5: Das Attribut 'ClientAutoGenerated' ist nicht zulässig.) Da der Blogbeitrag aus dem Jahr 2006 stammt und er einen Link zu einem Anschlussposting hat, gehe ich davon aus, dass er geändert wurde.

Ich kann den Follow-up-Beitrag jedoch nicht lesen, da anscheinend ein MSDN-Konto erforderlich ist.

Akzeptierte Antwort

Ich habe die Lösung dafür gefunden.

Bei der Erstellung meiner Tabelle habe ich vergessen, den Primärschlüssel hinzuzufügen und die Eigenschaft (Is Identity) auf yes zu setzen. Ich habe dann mein Entity-Modell erstellt und diesen Fehler erhalten.

Ich ging zurück und reparierte meine Datenbanktabelle, aber ich hatte immer noch die seltsame Ausnahme. Was das Problem am Ende gelöst hat, war das Entfernen der Entität und das erneute Erstellen, nachdem die Tabelle behoben wurde.

Keine Ausnahmen mehr :)


Beliebte Antwort

Letztes Mal habe ich den folgenden Code ausprobiert und sagte, es funktioniert gut

bs.SuspendBinding();
Data.SaveChanges();
bs.ResumeBinding();

Die wichtigsten Dinge, die ich Ihnen heute sagen möchte, sind:

1- Wenn wir den obigen Code verwenden, um die Bindung auszusetzen, müssen wir mehr Code ausführen, um eine Vielzahl von Szenarien zu korrigieren, z

2- Wenn wir anstelle des obigen Codes den folgenden Code verwenden, wird die Ausnahme verschwunden sein und alles wird in Ordnung sein, ohne dass mehr Code geschrieben werden muss

        Data.SaveChanges(System.Data.Objects.SaveOptions.None);

Ich hoffe, das löst deine ähnlichen Probleme

vielen Dank, Freunde



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum