2016-07-04 2 views
1

인터페이스에서 시작하여 실제 implmenetation으로 끝나는 몇 가지 상속 체인이 몇 단계 있습니다.EF 코어 : 매개 변수 유형을 매개 변수에 할당 할 수 없습니다.

class MyContext: DbContext{ 
    public DbSet<ErrorModel> Errors {get; set} 
} 

이후

DbSet<IBaseModel> set = new MyContext().Errors 

(를이 작동하지 :

그러나,이 코드는 내가 그런 일을 시도하고있다 그러나

IBaseModel model = new ErrorModel(); 

을 정확한 100 %이다 컴파일되지 않음)라고 말하면 인수 유형 DbSet<ErrorModel>을 매개 변수에 할당 할 수 없습니다. DbSet<IBaseModel>

무엇이 문제이며 해결 방법은 무엇입니까?


UPD1 : 인터페이스 대신 기본 클래스를 사용하는 경우 작동하지 않습니다. 그리고 이런 코드는

IQueryable<IBaseModel> tests = new MyContext().Errors 

도 별다른 문제없이 컴파일됩니다.

답변

1

DbSet<Item>DbSet<BaseItem>에서 상속되지 않았기 때문에이 기능이 작동하지 않습니다. DbSet<>은 가변적 인 구조이기 때문에 논리적으로 상당히 다른 것입니다. DbSet<BaseItem>BaseItem을 추가 할 수는 있지만 DbSet<Item>에 추가 할 수 없으므로 작동하지 않습니다. 같은 이유로 당신은 목록이나 다른 변경 가능한 구조를 변환 할 수 없습니다.

그러나 IEnumerable 또는 IReadOnlyCollection과 같은 변경 불가능한 구조의 경우이 변환은 정상적으로 작동합니다.

관련 문제