2011-08-28 8 views
5

mam podmiot User z kilkoma one-to-one i many-to-many stosunków i Identity primary key i generic repository który stworzył na każde żądanie.Struktura encji Wykryto sprzeczne zmiany. Może się to zdarzyć, gdy próbuje wstawić wiele podmiotów z tego samego klucza

Mam formularz rejestracyjny z weryfikacją klienta i serwera i postanowiłem wyłączyć sprawdzanie klienta, aby sprawdzić, jak zachowałby się serwer w takim przypadku.

Wyłączyłem walidacji klienta, aby przetestować formularz rejestracyjny i umieścić kilka nieprawidłowych wartości więc wrócić formę mówiąc, że mam kilka błędów, po tym jak ustalona, ​​że ​​mam bardzo ciekawy błąd mówiąc:

_context.SaveChanges(); //towing the error below: 

Conflicting changes detected. This may happen when trying to insert multiple entities with the same key 

to było dziwne dla mnie, bo indywidualny podmiot User ale kiedy znalazłem ten How to clean-up an Entity Framework object context? więc zamiast odłączania tylko User podmiot postanowiłem spróbować oczyścić kontekstu obiektu całkowicie uruchomiony ten kod:

var objectStateEntries = this.objectContext 
          .ObjectStateManager 
          .GetObjectStateEntries(EntityState.Added); 

    foreach (var objectStateEntry in objectStateEntries) 
    { 
     if(objectStateEntry.Entity != null) 
      this.objectContext.Detach(objectStateEntry.Entity); 
    } 

Więc po tym wszystkim działa dobrze, a ja nie dostaję błędu Conflicting changes detected, ale nadal zastanawiam się, dlaczego taka sytuacja miała miejsce, może ktoś może wyjaśnić?

+0

pokazać, jak jesteś z włożeniem 'użytkownik portu – haim770

Odpowiedz

0

można znaleźć odpowiedzi here:

context.ObjectStateManager.GetObjectStateEntries(System.Data.Entity.EntityState.Added| System.Data.Entity.EntityState.Unchanged); 
+1

Czy to odpowiedź na pytanie? Dokładnie zastanawia się, dlaczego tak się dzieje przede wszystkim dlatego, że jego kod nie powinien tworzyć zdegenerowanego stanu - a nie jak sprawdzić, co jest ważne, a co nie. –

Powiązane problemy