Доступ к DbContext из IQueryable

Я пытаюсь реализовать шаблон кэширования, который может потребовать использования Redis. Проблема с этим шаблоном заключается в том, что мне нужно отключить Configuration.ProxyCreationEnabled, а затем снова включить его, чтобы избежать каких-либо проблем в веб-ферме.

Я хотел бы получить доступ к DbContext из IQueryable, чтобы я мог делать это один раз, а не везде. Самый простой способ сделать это — передать используемый DbContext в мое расширение кэширования, однако я наткнулся на этот пост:

Доступ к DataContext за IQueryable

Есть ли способ получить доступ к DbContext аналогично ссылке выше, используя EF 4.1 Code Fist (DbSet и т. д.)?

Я пытался найти это сам, но изо всех сил пытался найти базовый класс из указанного DbSet в IQueryable с использованием отражения.


person didiHamman    schedule 05.09.2011    source источник


Ответы (1)


Решение, упомянутое в Доступ к DataContext за IQueryable, является хаком и не должно использоваться. Он зависит от имени частной переменной-члена в классе, реализующем IQueryable. Это означает, что реализующий класс может измениться в будущем выпуске EF/.NET Framework и нарушить работу вашего кода. Поскольку DbContext недоступен через интерфейс IQueryable, вы должны передать его в расширение кэширования, чтобы избежать предположений о реализации IQueryable. Это также более четко установит зависимость от DbContext в вашем интерфейсе кэширования, вместо того, чтобы похоронить его в реализации.

person Brent M. Spell    schedule 05.09.2011
comment
Спасибо за это. Пришел к аналогичному выводу, но подумал, что было бы неплохо абстрагироваться от реализации. - person didiHamman; 05.09.2011