0

我在互联网上看到了很多关于如何关闭自动编译的示例:

using (var db = new SampleEntities())
{
    db.ContextOptions.DefaultQueryPlanCaching = false;
}

但是,我在 db 上下文的任何地方都看不到这个属性。它甚至没有 ContextOptions。

互联网上的某个地方提到将其转换为 IObjectContextAdapter,在那里我得到了 ContextOptions,但仍然没有那个属性

((IObjectContextAdapter)db).ObjectContext.ContextOptions.?

请注意,我在使用 DbContext 和 DbSets 的 EF5 中使用默认生成。

我该如何关闭它?另请注意,这是 RTM,而不是 .NET 4.5 的测试版或 RC

4

1 回答 1

2

我不建议这样做,因为这很可能会产生比更好的性能更差的性能。此选项仅在ObjectQuery级别而不是ObjectContext级别可用。

var objectContext = ((IObjectContextAdapter)db).ObjectContext;
var objectSet = objectContext.CreateObjectSet<AccountsOnMonth>();
objectSet.EnablePlanCaching = false;

摘录

查询计划缓存在同一 AppDomain 内的 ObjectContext 实例之间共享。您无需持有 ObjectContext 实例即可从查询计划缓存中受益。

于 2012-10-29T21:17:04.127 回答