2016-12-03 2 views
-2

Ich speichere mehr als 50000 Datensätze & es ist ein langer Code, so dass ich hier nicht kopieren kann. Aber in der Zusammenfassung bekomme ich den folgenden Fehler, ich bekomme diesen Fehler auch nicht lokal, aber auf der Live-Seite erhält er diesen Fehler nicht jedes Mal. Ich bin nicht in der Lage, die genaue Zeile des Fehlers zu verfolgen: -Fehler Entitäten wurden möglicherweise geändert oder gelöscht, da Entitäten geladen wurden

Fehler: -

Error in InOutImport POST Error Message : Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded. Refresh ObjectStateManager entries.

Stack Trace: -

at System.Data.Entity.Internal.InternalContext.SaveChanges()

Wie kann ich diesen Fehler beheben?

+0

Fehlermeldung sieht ziemlich klar aus. Angenommen, Sie haben 50000 Datensätze aus der Datenbank, aktualisieren Sie sie und rufen Sie SaveChanges auf. Generierte UPDATE-Anweisungen werden ausgeführt und geben die Anzahl der betroffenen Zeilen zurück. Jetzt stellt sich heraus, dass die Anzahl der betroffenen Zeilen weniger als 50000 beträgt, was bedeutet, dass zum Beispiel einige Zeilen vor dem Moment gelöscht wurden, an dem Sie Zeilen aus der Datenbank erhielten und sie aktualisierten. Einige Ihrer Updates würden einfach verloren gehen, wenn dieser Fehler nicht ausgelöst würde. – Evk

+0

* es ist ein langer Code * Sie tun also wahrscheinlich zu viel in einem Glob Code. Versuchen Sie, es zu modularisieren, damit Sie verfolgen können, was wann passiert und in der Lage sein wird, den relevanten Teil hier zu zeigen. Dies ist ohne Code nicht zu beantworten. Wir können Ihnen nicht mehr als die Ausnahme erzählen. –

Antwort

1

Sie sind in eine DbUpdateConcurrencyException gelaufen. Das bedeutet, dass Ihre Entitäten wahrscheinlich eine ROWVERSION haben, die das Entity-Framework für optimistische Parallelität verwendet. Wenn Ihre Daten in der Datenbank gespeichert werden, überprüft EF, ob sich Ihre Daten geändert haben, seit Sie sie aus der Datenbank abgerufen haben. Das ist möglich wegen der ROWVERSION, die mit Ihrem enites kommt.

Es gibt keine Einheitslösung für dieses Problem. Wie Sie es lösen müssen, hängt von Ihrem speziellen Fall ab. Überprüfen Sie this MSDN article über Ihre Optionen bei der Lösung dieses Problems.

Wahrscheinlich müssen Sie die DbUpdateConcurrencyException.Entries-Eigenschaft überprüfen, um zu sehen, welche Ihrer 50000-Entitäten Nebenläufigkeitsprobleme haben.

Verwandte Themen