Proszę podać:
- Definicja jednostki
- Klasa mapowania / konfiguracja z kontekstu
- Definicja tabeli SQL
BackPropagateServerGen
Patrząc na ślad stosu, kluczową rzeczą, którą widzę, jest BackPropagateServerGen
.
Entity Framework uruchamia aktualizację względem bazy danych, ale jedna z wartości klucza złożonego (przypuszczalnie COPY_ID) jest faktycznie zmieniana przez wywołanie UPDATE. Ta wartość wygenerowana przez serwer wraca z wywołania SQL, a następnie Entity Framework skarży się, że wartość klucza jest zmieniana spod niej.
Zgaduję więc, że wartość klucza złożonego COPY_ID jest zdefiniowana jako identyfikator generowany przez serwer, ale dzieje się jedno lub oba z nich:
- Mapujesz do widoku lub procedury składowanej, która zakłóca to, czego Entity Framework oczekiwałby od waniliowej aktualizacji
- Masz jeden lub więcej wyzwalaczy w tabeli, widoku lub procedurze składowanej, które zakłócają wynik.
Jeśli masz jakieś wyzwalacze, wyłącz je tymczasowo, aby sprawdzić, czy problem ustąpi.
Jeśli mapujesz do widoku lub procedury składowanej, spróbuj mapować bezpośrednio do tabeli, jeśli to możliwe.
Użyj dowolnych narzędzi do profilowania, aby przechwycić, jaki kod SQL jest wykonywany przez kod.
Podsumowanie
Myślę, że wywołanie UPDATE faktycznie dociera do bazy danych, ale zwracany wynik zmienia wartości klucza, powodując niepowodzenie Entity Framework i prawdopodobnie wycofywanie transakcji UPDATE (w zależności od używanej wersji EF).