从IQueryable访问DbContext

时间:2011-09-05 15:33:42

标签: code-first ef4-code-only

我正在尝试实现可能需要使用Redis的缓存模式。此模式的问题是我需要禁用Configuration.ProxyCreationEnabled,然后重新启用它以避免Web场中出现任何问题。

我想要做的是从IQueryable访问DbContext,这样我就可以做到一次,而不是到处都是。最简单的方法是将正在使用的DbContext传递给我的缓存扩展,但是我遇到了这个帖子:

Access DataContext behind IQueryable

有没有办法使用EF 4.1 Code Fist(DbSet等)以与上述链接类似的方式访问DbContext?

我自己试图找到这个但是很难在IQueryable中使用反射从引用的DbSet中找到基类。

1 个答案:

答案 0 :(得分:7)

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