Błąd Entity Framework "The changes to the database were committed successfully but an error occurred while updating the object context"

ŁF

Podczas zapisywania zmian Entity Framework potrafi rzucić wyjątkiem o następującej treści: "The changes to the database were committed successfully, but an error occurred while updating the object context. The ObjectContext might be in an inconsistent state. Inner exception message: AcceptChanges cannot continue because the object's key values conflict with another object in the ObjectStateManager. Make sure that the key values are unique before calling AcceptChanges".
Wynika to z tego, że w bazie danych zaszły zmiany, których nie widzi ObjectStateManager, np. zaciągnąłeś z bazy do EF zawartość tabeli, w czasie życia kontekstu zmieniłeś je/usunąłeś z bazy z poziomu sql (albo innym programem), a potem chciałeś np. coś dodać do tej tabeli. Według EF powinny być dane, a baza ich nie ma, więc leci wyjątek.
Żeby się tego pozbyć, należy odświeżyć cache EF. Sposobów jest kilka, poniżej ten, który zadziałał u mnie:

	var entries = Entities.ObjectStateManager.GetObjectStateEntries(EntityState.Unchanged).Select(e => e.Entity);
	Entities.YouTableName.Context.Refresh(System.Data.Objects.RefreshMode.StoreWins, entries);

Kod powinien być wywołany po operacji, która powoduje rozjechanie się stanu EF ze stanem faktycznym, u mnie było to Entities.ExecuteStoreCommand("DELETE FROM YourTableName").

0 komentarzy