2013-08-21 13 views
9

Mam obiekt User i kiedy jest on usuwany przy użyciu Remove() w DbContext, nie jest usuwany z bazy danych. Co dziwne, moje zapytania dotyczące pobierania użytkowników już nie zwracają.Entity Framework 5 Remove() nie usuwa z bazy danych

Ten kod jest używany przez moją aplikację i działa bez żadnych problemów dla innych podmiotów.

Naprawdę doceniam sugestie, co to może być, ponieważ jestem zaskoczony!

#region Delete 
    public virtual void Delete(User entity) 
    { 
     var user = _context.Users.FirstOrDefault(u => u.UserId == entity.UserId); 
     if (user != null) 
     { 
      user.Roles.Clear(); 
      var actionHistories = _context.ActionHistories.Where(u => u.User.UserId == user.UserId); 
      foreach (var actionHistory in actionHistories) 
      { 
       _context.ActionHistories.Remove(actionHistory); 
      } 
      _context.Users.Remove(user); 

      _context.SaveChanges(); 
     } 
    } 
    #endregion 

P.S Kod do usuwania ról i ActionHistories został dodany przeze mnie aby sprawdzić, czy problem był z podmiotami powiązanymi istniejących, ale to nie rozwiąże problemu.

+0

Jaki jest błąd, który otrzymujesz? – DarthVader

+3

Czy otworzyłeś transakcję poza swoją metodą usuwania? Obiekt nie zostanie usunięty z bazy danych, dopóki nie zostanie zatwierdzona transakcja. Inne zapytania korzystające z tego samego kontekstu nie zobaczą usuniętego "użytkownika", ponieważ kontekst ma obiekt oznaczony jako "usunięty" –

+4

_ "nie jest usuwany z bazy danych. Co dziwne, moje zapytania o odzyskanie użytkowników już go nie zwracają jednak. "_ - wtedy to przeanalizuj. Czy używasz niestandardowego 'DbContext', który na przykład ustawia flagę' Deleted' zamiast usuwania wierszy z twardego? W jaki sposób pytasz o użytkownika i dlaczego go nie zwraca, jeśli wiersz nadal istnieje? Czy twoja aplikacja używa tego samego ciągu połączenia, co podczas sprawdzania bazy danych? – CodeCaster

Odpowiedz

1

Moja sugestia to próba użycia narzędzia do profilowania (np. EFprof z hibernacji nosorożców, która ma bezpłatną wersję próbną).

Pokaże dokładnie, co wygenerował kod SQL EF, dzięki czemu można obserwować, co dzieje się podczas przejścia przez SaveChanges.

Brzmi to dziwnie, być może pojawia się jakiś cichy błąd SQL, który może zostać ujawniony przez profilera.

5

spróbuj dodać:

_context.Entry(user).State = EntityState.Modified; 

przed

_context.SaveChanges(); 
2

Kiedyś taką samą odpowiedź jak @ tomsullivan1989 ale z EntityState.Deleted; i to rozwiązało mój podobny problem. Który miał komunikat o błędzie Nie można było zmienić relacji, ponieważ co najmniej jedna właściwość klucza obcego jest nieakceptowalna.

Powiązane problemy