DBContext缓存表达式查询树

时间:2012-11-07 17:05:35

标签: entity-framework c#-4.0 expression-trees dbcontext

我实际上正在开发一个项目,该项目使用非常大的linq实体查询(大约250行),他们与许多不同的实体合作。

这个查询取决于几个参数(最多3个或4个),所以我想“存储”我的查询的表达式树,并用我的几个参数修改这个参数。

IQueryable<Foo> myQuery = 
  GetBaseQuery()
  .Where(a => a.Param1 == "foo")
  .Where(a => a.Param2 == "bar");

除了使用编译查询之外,还有办法吗?

这个问题有一些条件

  • 我使用DbContext并且很难改变到ObjectContext,这似乎是使用编译查询的预先要求。
  • 我使用Visual Studio 2010所以......我只限于.NET 4和实体框架4.3(没有.NET 4.5,EF5和自动编译查询)

那么,有没有办法

  • 存储一个仅用作“基础”的表达式树,不会花太多时间生成?
  • 在Visual Studio 2010中使用.NET 4.5?
  • 或使用带有DbContext的编译查询

非常感谢提前!!!

1 个答案:

答案 0 :(得分:1)

在行之间阅读,似乎你想要用DbContext编译查询。 (这与存储LINQ表达式树并不完全相同,但这似乎不是我们所做的测试中的性能瓶颈。)据我所知,您有以下选项:

  • 将EF5与.NET 4.5一起使用。即使您使用的是VS2010并且针对.NET 4,如果您在运行该应用程序的计算机上安装.NET 4.5,那么您将获得自动编译的查询。
  • 将EF6与.NET 4或.NET 4.5一起使用。 EF6将自动编译的查询代码移出.NET Framework,因此即使在.NET 4上运行也可以使用它。
  • 使用ObjectContext和CompiledQuery

我不知道有任何方法将CompiledQuery与DbContext一起使用,也没有任何计划让这项工作成功。