我在互联网上看到很多关于如何使用以下方式关闭自动编译的示例:
using (var db = new SampleEntities())
{
db.ContextOptions.DefaultQueryPlanCaching = false;
}
但是,我无法在db上下文的任何位置看到此属性。它甚至没有ContextOptions。
互联网上有一处提到将它投射到IObjectContextAdapter,我得到了ContextOptions,但仍然不是那个属性
((IObjectContextAdapter)db).ObjectContext.ContextOptions.?
请注意,我在EF5中使用默认生成,它使用DbContext和DbSets。
如何关闭它?另请注意,这是RTM,而不是beta,或.NET 4.5的RC
答案 0 :(得分:2)
我不建议这样做,因为这很可能会产生比更好的性能更差的表现。此选项仅在ObjectQuery级别而非ObjectContext级别提供。
var objectContext = ((IObjectContextAdapter)db).ObjectContext;
var objectSet = objectContext.CreateObjectSet<AccountsOnMonth>();
objectSet.EnablePlanCaching = false;
查询计划缓存在同一AppDomain中的ObjectContext实例之间共享。您不需要保留ObjectContext实例以从查询计划缓存中受益。