【问题标题】:Way to automate setting of MergeOptions自动设置 MergeOptions 的方法
【发布时间】:2011-02-11 11:48:52
【问题描述】:

我正在寻找一种自动迭代所有 ObjectQueries 并将合并选项设置为不跟踪(只读上下文)的方法。一旦我知道如何去做,我将能够使用 T4 模板生成默认的只读上下文。这可能吗?

例如,假设我的对象上下文中有这些表

SampleContext

  • 表A
  • 表B
  • 表C

我必须经历并执行以下操作。

SampleContext sc = new SampleContext();
sc.TableA.MergeOption = MergeOption.NoTracking;
sc.TableB.MergeOption = MergeOption.NoTracking;
sc.TableC.MergeOption = MergeOption.NoTracking;

我正在尝试找到一种使用对象上下文来概括这一点的方法。

我想把它归结为类似的东西

foreach(var objectQuery : sc){
    objectQuery.MergeOption = MergeOption.NoTracking;
}

最好我想使用基类(ObjectContext):

ObjectContext baseClass = sc as ObjectContext
var objectQueries = sc.MetadataWorkspace.GetItem("Magic Object Query Option);

但我不确定我什至可以访问查询。任何帮助,将不胜感激。

【问题讨论】:

    标签: entity-framework .net-3.5


    【解决方案1】:

    我认为反思将是唯一的选择。大致如下:

    IEnumerable<ObjectQuery> queries = from pd in context.GetType().GetProperties()
       where pd.PropertyType.IsSubclassOf(typeof(ObjectQuery))
       select (ObjectQuery)pd.GetValue(context, null);
    

    【讨论】:

      【解决方案2】:

      如果你想对所有 ObjectSet 执行一次,对所有执行,试试这个:

      var Ctx=YourDbContext;
      var objSetProps = Ctx.GetType().GetProperties().Where(prop => prop.PropertyType.IsGenericType && prop.PropertyType.GetGenericTypeDefinition() == typeof(ObjectSet<>));
      foreach(PropertyInfo objSetProp in objSetProps)
      {
          ObjectQuery objSet = (ObjectQuery)objSetProp.GetValue(Ctx, BindingFlags.GetProperty, null, null, null);
          objSet.MergeOption=MergeOption.NoTracking;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-03-12
        • 1970-01-01
        • 2011-07-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-10
        • 1970-01-01
        相关资源
        最近更新 更多