2010-04-23 5 views
0

모든 ObjectQueries를 반복하고 병합 옵션을 추적 없음 (읽기 전용 컨텍스트)으로 설정하는 자동화 된 방법을 찾고 있습니다. 일단 내가 어떻게 그것을 알아 내면 T4 템플릿을 사용하여 기본 읽기 전용 컨텍스트를 생성 할 수있을 것입니다. 이것이 가능한가? 예를 들어MergeOptions 설정 자동화 방법

내가 통과해야하고 할 것 난 내 개체 컨텍스트

SampleContext에서 이러한 테이블이

  • TableA의
  • TableB의
  • TableC

을 말할 수 아래에.

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

개체 컨텍스트를 사용하여이를 일반화하는 방법을 찾으려고합니다.

내가 바람직 I가없는 baseclass (ObjectContext를) 사용하여 수행하고자하는

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

처럼 뭔가를 내려 할 :

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

을하지만 난 내가도 얻을 수 있습니다 확실하지 않다 쿼리에 대한 액세스. 어떤 도움을 주시면 감사하겠습니다.

답변

2

반성이 유일한 선택 일 것이라고 생각합니다. 의 라인을 따라 뭔가 : 당신 싶어 모든 ObjectSet, 한 시간 동안 그것을 할 경우

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

, 모든 exection를 들어,이 시도 :

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; 
} 
관련 문제