2011-09-05 40 views
6

我想实现一个可能需要使用Redis的缓存模式。这种模式的问题是我需要禁用Configuration.ProxyCreationEnabled,然后重新启用它,以避免Web场中的任何问题。从IQueryable访问DbContext

我想要做的就是从IQueryable访问DbContext,这样我就可以做到这一次,而不是到处都是。要做到这一点,最简单的方法是通过的DbContext使用到我的缓存扩展,但是我碰到此帖一:

Access DataContext behind IQueryable

是否有访问的DbContext以类似的方式,以上面的链接的方式使用EF 4.1 Code Fist(DbSet's等)?

我试图自己找到这个,但一直在努力从使用反射的IQueryable中引用的DbSet中找到基类。

回答

5

Access DataContext behind IQueryable中提到的解决方案是黑客攻击,不应使用。它依赖于实现IQueryable的类中的私有成员变量的名称。这意味着实现类可能会在未来的EF/.NET Framework版本中发生变化并破坏您的代码。由于DbContext无法通过IQueryable接口访问,因此应将其传递到缓存扩展中,以避免对IQueryable实现进行假设。这样做也将更清楚地在缓存界面中建立对DbContext的依赖关系,而不是将其隐藏在实现中。

+0

谢谢。得出了类似的结论,但认为抽象实现会很好。 – didiHamman