2009-03-04 9 views
7

Próbuję zaimplementować repozytorium Soft-deletable. Zwykle można to łatwo zrobić za pomocą detektora Usuń zdarzenia. Aby odfiltrować usunięte elementy, mogę dodać atrybut Gdzie do mapowania klas. Muszę jednak wdrożyć jeszcze dwie metody w repozytorium dla tego obiektu: Przywróć i Oczyść. Funkcja przywracania "przywróci" encje, a funkcja "Usuń" je usunie. Oznacza to, że nie mogę użyć atrybutu Where (ponieważ blokuje on jednostki z miękkim usunięciem do dowolnego dostępu).Filtry NHibernate nie działają z Session.Get

Próbowałem zamiast tego używać filtrów . Mogę utworzyć filtr i włączyć lub wyłączyć go w sesji, aby osiągnąć ten sam wynik. Ale problem polega na tym, że filtry nie mają żadnego wpływu na metodę Session.Get (mają wpływ tylko na dostęp oparty na ICriteria).

Jakieś pomysły na rozwiązanie tego problemu?

Dzięki

+0

Czy kiedykolwiek znalazłeś rozwiązanie tego problemu? – kmoo01

+0

Nie. Filtry nie działają w Get. Wpływają tylko na kryteria. Musiałem zaimplementować inne podejście do repozytorium bazowego tylko dla Get i pozwolić filtrowi poradzić sobie z innymi przypadkami użycia. – Khash

Odpowiedz

2

cytat z Fabio Maulo:

Przez design.Filters nie działają z GET lub obciążeniu, ponieważ ich znaczenie: Chcę obciążenie podmiocie, z tego identyfikatora.

filtry dynamiczne pracować z HQL/kryteria i Collection (gdzie włączonych dla kolekcji) tylko wtedy, gdy używasz jawne dołącza lub, bardziej ogólnie, gdy QuerySpace z meczu filtra z QuerySpace kwerendy.

0

Czy utwór IInterceptor do tego?

Patrząc na EmptyInterceptor stwierdzam, że ma on OnLoad, który, jak sądzę, mógłbyś użyć do przechwycenia ładowania obiektu.

Powiązane problemy