2011-09-05 6 views
6

Próbuję zaimplementować wzór buforowania, który może wymagać użycia Redis. Problem z tym wzorcem polega na tym, że muszę wyłączyć Configuration.ProxyCreationEnabled, a następnie ponownie włączyć go, aby uniknąć problemów w farmie internetowej.Access DbContext z IQueryable

Co chciałbym zrobić, to uzyskać dostęp do DbContext z IQueryable, więc mogę to zrobić raz zamiast wszędzie. Najprostszym sposobem, aby to zrobić, to przekazać DbContext wykorzystywane do mojego rozszerzenia buforowania, jednak natknąłem się na ten post:

Access DataContext behind IQueryable

Czy istnieje sposób dostępu do DbContext w podobny sposób jak w linku powyżej używając EF 4.1 Code Fist (DbSet's, itp.)?

Próbowałem znaleźć to sam, ale walczyłem, aby znaleźć klasy bazowej z odwołanych DbSet w IQueryable za pomocą refleksji.

Odpowiedz

5

Rozwiązanie wymienione w Access DataContext behind IQueryable jest hackerem i nie powinno być używane. Opiera się na nazwie prywatnej zmiennej członkowskiej w klasie implementującej IQueryable. Oznacza to, że klasa implementacyjna może się zmienić w przyszłej wersji systemu EF/.NET Framework i złamać kod. Ponieważ DbContext nie jest dostępny za pośrednictwem interfejsu IQueryable, należy przekazać go do rozszerzenia pamięci podręcznej, aby uniknąć przyjmowania założeń dotyczących implementacji IQueryable. Spowoduje to także wyraźniejsze określenie zależności od DbContext w twoim interfejsie buforowania, zamiast zakopywania go w implementacji.

+0

Dzięki za to. Doszedł do podobnego wniosku, ale myślał, że byłoby miło wytłumaczyć implementację. – didiHamman