2014-08-28 2 views
0

문맥에서 반환 엔터티에 대한 코드를 동적으로 재사용 할 수있는 방법이 있는지 궁금합니다.동적으로 컨텍스트 속성을 선택 하시겠습니까?

public List<AbandonCode> GetAbandonCodes() 
    { 
     List<AbandonCode> ab; 
     using (DataWarehouseEntities context = new DataWarehouseEntities()) 
     { 
      ab = (from a in context.AbandonCodes select a).ToList<AbandonCode>(); 
     } 
     return ab; 
    } 

무엇 IM이 유사한 도우미 메서드를 작성하면됩니다 기대하지만 난 context.WhatIWantToGet 나 반환 유형을 설정하는 방법을 알아낼 수 없습니다 예를 들어, 나는 모든 기록을 수신하려면 다음을 사용하고 있습니다. 다음과 유사하게 보입니다.

public List<????> GetAbandonCodes(Type t) 
    { 
     List<t> ab; 
     using (DataWarehouseEntities context = new DataWarehouseEntities()) 
     { 
      ab = (from a in context.???? select a).ToList<t>(); 
     } 
     return ab; 
    } 

내가 할 수있는 일이 가능한 것일까 요?

답변

1

여기에는 몇 가지 옵션이 있습니다.

public List<T> GetAbandonCodes<T>() where T : class 
{ 
    List<T> ab; 
    using (DataWarehouseEntities context = new DataWarehouseEntities()) 
    { 
     ab = context.Set<T>().ToList(); 
    } 
    return ab; 
} 

... 당신이 이런 식으로 부를 것이다 : :

var codes = GetAbandonCodes<AbandonCode>(); 

당신이 Type 개체를 전달하려면 여기 EF 컨텍스트에 설정 < T> 방법을 사용하여 완전히 일반적인 일이다 제네릭 메서드를 호출하는 대신 비 제너릭 Set()을 사용할 수 있습니다.

public static DbSet GetAbandonCodes(Type t) 
    { 
     DbSet ab; 
     using (DataWarehouseEntities context = new DataWarehouseEntities()) 
     { 
      ab = context.Set(t); 
     } 
     return ab; 
    } 

당신은 다음과 같이 사용할 수 있습니다 :

var codes = GetAbandonCodes(typeof(AbandonCode)).Cast<AbandonCode>().ToList(); 

내가하지만, 첫 번째 방법을 추천 할 것입니다 그것의, 당신이 사용할 수있는 뭔가 결과를 캐스팅해야하기 때문에 조금 복잡합니다 안전하고 사용하기 쉽습니다.

+0

아우,'Set', nice. EF 지식을 새로 고쳐야합니다. –

관련 문제