2009-07-14 6 views
7

Mamy ten problem pojawia się sporadycznie, ale teraz mogę go odtworzyć za każdym razem. Zwiększam licznik wyświetleń na moich niestandardowych forach wbudowanych, co powoduje błąd:NHibernate.LazyInitializationException

NHibernate.LazyInitializationException: failed to lazily initialize a collection, no session or session was closed

Ten błąd występuje w innej kolekcji w obiekcie. Jeśli dodam:

.Not.LazyLoad()

Do mojego Fluent mapowania, przesunięcia błędach wokół mojego projektu. Ciągle wyłączyć leniwy załadunku na obiektach intil idzie do miejsca, gdzie nie było leniwy załadunku, a potem wyrzucił ten błąd:

NHibernate.LazyInitializationException: Could not initialize proxy - no Session.

Tak więc wyjąłem niezapominajki na mój leniwy załadunku i teraz” m z powrotem do kwadratu. Występują tylko błędy podczas zwiększania tego licznika widoku. Oto fragment z mojej klasy bazowej zapisać kod:

using (ISession session = GetSession()) 
using (ITransaction tx = session.BeginTransaction()) 
{ 
     session.SaveOrUpdate(entity); 
     tx.Commit(); 
} 

rozglądając się, czytałem w innym wątku, że transakcje mogą powodować problem, ale to ze względu na to, gdzie zostały one umieszczone. Ten kod jest rozszerzony na klasy, które są oddzielone od moich obiektów domenowych (klas repozytoriów). Oto wpis:

hibernate: LazyInitializationException: could not initialize proxy

Nie wierzę, że to mój problem tutaj. Oto moje płynne mapowanie dla pierwszej kolekcji, która rzuca błąd. Istnieje kilka innych podobnych kolekcji.

HasManyToMany(x => x.Votes) 
    .WithTableName("PostVotes") 
    .WithParentKeyColumn("PostId") 
    .WithChildKeyColumn("VoteId"); 
+0

http://stackoverflow.com/questions/1117633/do-i-have-to-close-sessions-w-castles-isessionmanager-for-nhibernate Moje pytanie jest podobne. –

Odpowiedz

5

Trochę dalszych badań nad tym problemem, ponieważ powtarza się, że podczas jednego połączenia z serwerem, jeśli zrobisz zapis i dostaniesz, musisz opróżnić sesję. Wykonuję akcję po zapisie i wydaje się, że poprawiłem problem.

1

Sprawdź, czy w tej sesji nie ma żadnych innych obiektów. Miałem podobną sytuację, w której wywołałem Save na obiekcie, który nie miał żadnego Lazy Loading i naprawdę wysłał mi pętlę. Dlaczego otrzymam ten błąd na obiekcie, który nie jest leniwy wczytywania?

W mojej sytuacji ładowałem kilka innych obiektów na stronę i te obiekty nie były poprawnie odwzorowane. Kiedy zadzwoniłem Save NHibernate spróbuję zsynchronizować się w sesji i zrzucić błąd.

Spróbuj usunąć wszystkie inne NHibernate, pozostawiając tylko tę aktualizację licznika. Jeśli błąd nie występuje, po prostu licznik powoli dodaje z powrotem inne połączenia, dopóki błąd nie powróci. Następnie możesz zacząć zwracać się do prawdziwego winowajcy.

+0

Wypróbowałem twoją sugestię i jest to błąd w kodzie strony, gdy próbuję iterować jedną z kolekcji. Nie ma leniwego ładowania, ale nadal jest błąd. Jeśli usuniemy przyrost licznika, strona działa poprawnie. – Josh