Bitte fügen Sie hinzu:
- Die Entitätsdefinition
- Die Zuordnungsklasse / Konfiguration aus dem Kontext
- Die SQL-Tabellendefinition
BackPropagateServerGen
Wenn ich mir den Stack-Trace anschaue, sehe ich vor allem BackPropagateServerGen
.
Entity Framework führt Ihr Update für die Datenbank aus, aber einer Ihrer zusammengesetzten Schlüsselwerte (vermutlich COPY_ID) wird tatsächlich durch den UPDATE-Aufruf geändert. Dieser vom Server generierte Wert kommt vom SQL-Aufruf zurück, und Entity Framework beschwert sich dann, dass der Schlüsselwert darunter geändert wird.
Ich würde also vermuten, dass Ihr zusammengesetzter Schlüsselwert COPY_ID als vom Server generierter Bezeichner definiert ist, aber einer oder beide der folgenden Fälle auftreten:
- Sie ordnen eine Ansicht oder eine gespeicherte Prozedur zu, die das stört, was Entity Framework von einem Standard-UPDATE erwarten würde
- Sie haben einen oder mehrere Trigger in der Tabelle, Ansicht oder gespeicherten Prozedur, die das Ergebnis beeinträchtigen.
Wenn Sie Trigger haben, deaktivieren Sie sie vorübergehend, um zu sehen, ob das Problem dann behoben wird.
Wenn Sie eine Ansicht oder eine gespeicherte Prozedur abbilden, versuchen Sie, wenn möglich, direkt auf die Tabelle abzubilden.
Verwenden Sie beliebige Profilerstellungstools, um zu erfassen, welche SQL vom Code ausgeführt wird.
Zusammenfassung
Ich denke, der UPDATE-Aufruf erreicht tatsächlich die Datenbank, aber das Rückgabeergebnis ändert die Schlüsselwerte, wodurch Entity Framework fehlschlägt und wahrscheinlich die UPDATE-Transaktion zurückgesetzt wird (je nachdem, welche Version von EF Sie verwenden).