2016-10-21 5 views
0

내 EF 컨텍스트에는 계층 구조 당 접근 방식으로 관리되는 클래스 계층 구조가 있습니다. 다음과 같이EF - 계층 구조별 특정 형식 테이블의 모든 레코드를 추출합니다.

public abstract class BaseClass 
{ 
    [Required] 
    public int Id {get; set;} 

    ... 
} 

public abstract class ExtendedClass1 : BaseClass 
{ 

    ... 

} 

public abstract class ExtendedClass2 : BaseClass 
{ 

    ... 

} 

클래스가 구성 :

public class ExtendedClass1Configuration : 
    EntityTypeConfiguration<ExtendedClass1> 
{ 
    ... 

    this.Map(m => m.Requires("Discriminator").HasValue("ExtendedClass1")); 
} 

나는 저장소를 사용하여 데이터베이스에 액세스하려면

그러므로 나는 그것에서 파생 기본 추상 클래스와 클래스의 무리가 일반 저장소에서 파생 된 :

public abstract class Repository<TEntity> : IRepository<TEntity> where TEntity: BaseClass 
{ 
    protected DbContext context; 

    DbSet<TEntity> GetSet() 
    { 
     return this.context.Set<TEntity>(); 
    } 

    public virtual void Add(TEntity entity) 
    { 
     this.GetSet().Add(entity); 
    } 

    ... 
} 

public class BaseClassRepository : Repository<BaseClass>, IBaseClassRepository 
{ 

    ... 

} 

특정 하위 유형의 모든 클래스를 추출하는 저장소 (예 : ExtendedClass1의 모든 레코드).

The type or namespace name 'type' could not be found

내가 지금 노력하고있어 또 다른 방법이 같은 것입니다 :

public IEnumerable<BaseClass> GetByType(Type type) { 
    return context.Set<BaseClass>().OfType<type>(); 
} 

이 나에게 다음과 같은 컴파일 오류가 있습니다 : 다음과 같이

내가 성공하지 않고, 몇 가지 방법을 시도했다 :

public IEnumerable<TBaseClass> GetByType() where TBaseClass : BaseClass { 
    return context.Set<BaseClass>().OfType<TBaseClass>(); 
} 

내가 뭘 잘못하고 있니? 어떻게 구현할 수 있습니까?

+0

'OfType (); 도대체 무엇입니까? (버그가 아니라면) – Will

+0

GetByType 메소드에서 다음 줄을 확인하십시오 : return context.Set () .OfType (); 반환 컨텍스트 여야합니다. () .OfType (); 유형 이름은 변수가 아닙니다. –

+1

그 라인이 컴파일되지 않습니다, 그것은 당신에게 내가 시도하고있는 다양한 접근 방법을 알려주는 것입니다 @Will – user449689

답변

2
public IEnumerable<BaseClass> GetByType(Type type) 
{ 
    return context.Set<BaseClass>().OfType<type>(); 
} 

가 정확하지, FTW

public IEnumerable<BaseClass> GetByType<T>() 
{ 
    return context.Set<BaseClass>().OfType<T>(); 
} 

Typeparams를 사용합니다.

+0

다시 한번 감사드립니다 !!! – user449689