2011-10-10 17 views
5

Zasadniczo otrzymuję ten wyjątek podczas próby usunięcia kolekcji elementów z nHibernate. Poniżej jest mój kodNHibernate TooManyRowsAffectedException podczas próby usunięcia wielu obiektów.

public void DeleteAll<T>(IList<T> entities) 
    { 
     using(var tx = session.BeginTransaction()) 
     { 
     try 
     { 
      entities.ForEach(e=>session.Delete(e)); 
      tx.Commit(); 
     } 
     catch(Exception) 
     { 
      tx.Rollback(); 
     } 
     } 
    } 

Korzystanie HQL działa bez problemu, ale wolałbym, aby trzymać się podejścia LINQish .. No i łączę się z bazą danych Oracle.

+0

to jest wyjątek, jeśli operacja usuwania usuwa więcej wierszy niż oczekiwano. czy możesz sprawdzić wygenerowany sql i tabelę bazy danych, aby zobaczyć, która instrukcja może potencjalnie usunąć więcej niż jeden wiersz? – Firo

+1

Rozumiem, dlaczego wyjątek został zgłoszony, oczekuje on, że tylko jeden wiersz zostanie zmieniony (w tym przypadku usunięty), ale dlaczego ???? Nhprof nie działa w naszym firmowym środowisku sieciowym :( – Duy

+1

zaloguj się z log4net 'NHIbernate.SQL' do pliku, skopiuj tam sqls w kliencie Oracle i uruchom je tam, aby zobaczyć, który usuwa więcej niż jeden wiersz – Firo

Odpowiedz

1

Nie można usunąć element przez foreach, spróbować i być ostrożnym z indeksem dla po wyjąć zestaw Główna -

Powiązane problemy