Uveďte prosím:
- Definice entity
- Mapovací třída / konfigurace z kontextu
- Definice tabulky SQL
BackPropagateServerGen
Při pohledu na trasování zásobníku vidím klíčovou věc BackPropagateServerGen
.
Entity Framework spouští vaši aktualizaci proti databázi, ale jedna z vašich složených hodnot klíče (pravděpodobně COPY_ID) je ve skutečnosti měněna voláním UPDATE. Tato hodnota generovaná serverem se vrací z volání SQL a Entity Framework si pak stěžuje, že se hodnota klíče mění z pod ní.
Předpokládám tedy, že vaše hodnota složeného klíče COPY_ID je definována jako identifikátor vygenerovaný serverem, ale dochází k jednomu nebo obojímu:
- Mapujete na zobrazení nebo uloženou proceduru, která narušuje to, co Entity Framework očekává od vanilla UPDATE
- V tabulce, zobrazení nebo uložené proceduře máte jeden nebo více spouštěčů, které narušují výsledek.
Pokud máte nějaké spouštěče, dočasně je deaktivujte, abyste zjistili, zda problém přestane.
Pokud mapujete na pohled nebo uloženou proceduru, zkuste mapovat přímo do tabulky, pokud je to možné.
Použijte jakékoli profilovací nástroje, které máte, abyste zachytili, co SQL je vykonáváno kódem.
Shrnutí
Myslím, že volání UPDATE skutečně dosahuje databáze, ale výsledkem návratu je změna hodnoty klíče, což způsobí selhání Entity Framework a pravděpodobně vrátí transakci UPDATE (v závislosti na verzi EF, kterou používáte).