如何在禁用EnablePlanCaching的情况下使用ObjectContext.LoadProperty?

时间:2013-12-06 12:07:37

标签: entity-framework-5 objectcontext

在ObjectContext对象上,我使用这样的代码来加载导航属性。

    context.LoadProperty(entity, navigationProperty, 
        System.Data.Objects.MergeOption.AppendOnly);

我想对将通过此类调用生成的查询禁用计划缓存吗?

有可能吗?

是否可以使用DBContext包装上下文?

提前致谢。

1 个答案:

答案 0 :(得分:1)

我使用DBContext解决了这个问题。

DbContext dbc = new DbContext(context, false);
dbc.Entry<T>(object).Reference<TReference>(@"ReferenceName").Query().DisablePlanCaching().Load();
dbc.Entry<T>(object).Collection<TCollection>(@"CollectionName").Query().DisablePlanCaching().Load();

使用DisablePlanCaching扩展方法(灵感来自找到的here):

public static IQueryable<T> DisablePlanCaching<T>(this IQueryable<T> query)
{
    ObjectQuery<T> q = query as ObjectQuery<T>;
    if ( q == null )
        throw new InvalidOperationException(@"IQueryable<T> is not of type ObjectQuery<T>");

    q.EnablePlanCaching = false;
    return query;
}