Entity Framework-Masseneinfügung löst KeyNotFoundException-Fehler aus

9

Ich verwende EF6 und wegen der niedrigen Geschwindigkeit von AddRange() Methode muss ich BulkInsert verwenden. Also habe ich das NuGet-Paket von BulkInsert für EF6 über hier hinzugefügt.

Als erstes habe ich nach dem Hinzufügen von dll s diese Warnung erhalten:

  

Gefunden Konflikte zwischen verschiedenen Versionen der gleichen abhängigen   Versammlung. Setzen Sie die Eigenschaft "AutoGenerateBindingRedirects" auf   true in der Projektdatei.

Ich habe eine List aller meiner Contact Entitäten gemacht, nämlich contactsToInsert , die hinzugefügt werden müssen (Meine Kontakte haben auch einen Fremdschlüssel in einer anderen Tabelle). Als ich versuchte, den folgenden Code auszuführen, erhalte ich ein KeyNotFoundException , das behauptet " Der angegebene Schlüssel war nicht im Wörterbuch vorhanden ".

%Vor%

Hinweis: Ich verwende das BulkInsert in einem BackgroundWorker . Könnte dies möglicherweise die Ursache für das Problem sein, das von diesem Fix beurteilt wird?

StackTrace:

%Vor%     
Disasterkid 26.08.2015, 11:17
quelle

3 Antworten

2

Mit Änderungen am Code in diesem Blogbeitrag , hier ist, was für meine Code First Fluent-API-Einrichtung funktionierte, nachdem der gleiche "The given key was not present in the dictionary" -Fehler bei BulkInsert() aufgetreten ist. Die einzige Abhängigkeit hier ist die ToDataTable() Erweiterungsmethode, die im DataExtensions Snippet des oben genannten Posts gefunden wird.

Der relevante Teil ist die GetColumnMappings() -Methode, die den bevorzugten Namen der POCO-Klasseneigenschaft (den, den Sie im Code angegeben haben) als Quellspaltenname (in der aufgezählten-gedrehten-Datentabelle) und Verknüpft es mit dem Namen des Metadaten-Members (dem Namen der DB-Spalte) als Zielspaltenname.

GetColumnMappings ():

%Vor%

Vollständiger Code:

%Vor%     
Marc Lopez 03.08.2016 19:52
quelle
0

Ok, ich hatte den gleichen Fehler konnte keine Antworten online finden, so musste tief suchen, hier ist, was ich dachte:

Wenn Ihre Entität geerbt ist und die untergeordneten Entitäten, falls nicht als Teil des DBSet definiert, einen Fehler dieser Art kennzeichnet, ist zweitens nicht sicher, warum sie den neuen DbContext nur mit der verwandten Entität erwartet, die für bulkInsertions verwendet wird andere Entitäten gibt es den gleichen Fehler.

Also ist es die 2 Ursache, also musste ich diese beide reparieren, und wie ein Pferd laufen !!!

ist es wert, es zu versuchen, also versuchen Sie es

    
Ramesh Krishnamurthy 01.10.2015 00:08
quelle
-2

Die "BulkInsert" -Bibliothek ist sehr schnell, aber nicht sehr flexibel und wird nicht unterstützt.

Es unterstützt nicht alle Arten der Vererbung (TPC, TPT) und hat Probleme mit der Spaltenzuordnung.

Das Problem, das Sie haben, ist aus einem dieser Gründe.

Haftungsausschluss : Ich bin der Eigentümer des Projekts Entity Framework Extensions

Diese Bibliothek ist die ultimative Bibliothek für die Leistung und ermöglicht:

  • BulkSaveChanges
  • BulkInsert
  • BulkUpdate
  • BulkDelete
  • BulkMerge

Alle Vererbung und Assoziation werden unterstützt.

Beispiel:

%Vor%     
Jonathan Magnan 22.06.2016 13:24
quelle

Tags und Links