Способ автоматизации настройки MergeOptions - PullRequest
1 голос
/ 23 апреля 2010

Я ищу автоматический способ перебора всех объектов ObjectQueries и установки опции слияния без отслеживания (контекст только для чтения).Как только я узнаю, как это сделать, я смогу сгенерировать контекст по умолчанию только для чтения, используя шаблон T4.Это возможно?

Например, допустим, у меня есть эти таблицы в контексте моего объекта

SampleContext

  • TableA
  • TableB
  • TableC

Я должен был бы пройти и сделать следующее.

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);

Но я не уверен, что смогу даже получить доступ кзапросы.Любая помощь будет оценена.

Ответы [ 2 ]

4 голосов
/ 29 ноября 2012

Если вы хотите сделать это для всех 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;
}
3 голосов
/ 23 апреля 2010

Я думаю, что отражение будет единственным выбором для этого.Что-то вроде:

IEnumerable<ObjectQuery> queries = from pd in context.GetType().GetProperties()
   where pd.PropertyType.IsSubclassOf(typeof(ObjectQuery))
   select (ObjectQuery)pd.GetValue(context, null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...