1

Ich habe eine DB, die von EF6 Code First erstellt. Einige Tabellen haben eine Identitätsspalte. Ich muss einige Datensätze in diese Tabellen mit OLD Id-Werten einfügen. Ich habe versucht, die Lösung, die in diesem Link How to switch between DatabaseGeneratedOption.Identity... erschien, die zeigt, wie Sie zwischen berechneten und keine Optionen, aber nicht auf eine Identitätsspalte wechseln. Als ich es versuchte, habe ich folgende Fehlermeldung erhalten: "Expliziter Wert für Identitätsspalte kann nicht in die Tabelle 'Links' eingefügt werden, wenn IDENTITY_INSERT auf 'OFF' gesetzt ist." Gibt es eine Möglichkeit, dies zu lösen?Wie man schaltet DatabaseGeneratedOption.Identity on/off zur Laufzeit

Antwort

2

Das Problem, dem Sie gegenüberstehen, ist, dass EF explizite ID-Werte an das DBMS sendet, aber keine erwartet, während IDENTITY_INSERT deaktiviert ist.

Sie müssen zusätzlich folgendes tun: context.Database.ExecuteSqlCommand ("SET IDENTITY_INSERT Links ON");

Dies weist Ihr DBMS an, auch explizite Werte zu akzeptieren. Damit dies funktioniert, müssen Sie diesen Befehl und (mindestens) SaveChanges() in eine Transaktion einbinden.

+1

Großartig. Es klappt! –