2011-09-05 14 views
6

Estoy intentando implementar un patrón de caché que puede necesitar utilizar Redis. El problema con este patrón es que necesito desactivar Configuration.ProxyCreationEnabled y luego volver a habilitarlo para evitar cualquier problema en una granja de servidores web.Acceda a DbContext desde IQueryable

Lo que me gustaría hacer es acceder al DbContext desde IQueryable para poder hacerlo una vez en lugar de hacerlo en todas partes. La forma más sencilla de hacerlo es pasar la DbContext ser utilizado en mi extensión de almacenamiento en caché, sin embargo, me encontré con este post:

Access DataContext behind IQueryable

¿Hay una manera de acceder a la DbContext de una manera similar a la del foro usando EF 4.1 Code Fist (DbSet's, etc.)?

He intentado encontrarlo yo mismo, pero he tenido problemas para encontrar la clase base del DbSet al que se hace referencia en IQueryable utilizando la reflexión.

Respuesta

5

La solución mencionada en Access DataContext behind IQueryable es un hack y no debe utilizarse. Se basa en el nombre de una variable de miembro privado en la clase que implementa IQueryable. Esto significa que la clase de implementación podría cambiar en una versión futura de EF/.NET Framework y romper su código. Como no se puede acceder al DbContext a través de la interfaz IQueryable, debe pasarlo a su extensión de almacenamiento en caché para evitar hacer suposiciones sobre la implementación de IQueryable. Hacerlo también establecerá más claramente la dependencia de DbContext en su interfaz de almacenamiento en caché, en lugar de enterrarlo en la implementación.

+0

Gracias por eso. Llegaba a una conclusión similar, pero pensaba que sería bueno resumir la implementación. – didiHamman

Cuestiones relacionadas