내가 가장 간단한 데모 코드는 내가 가지고 올 수 내가 엔티티 프레임 워크 4를 사용하여 개체로 구현하고 인터페이스의 몇 가지를 지정한 것입니다 : 나는 위에서 다음과 같은 컴파일러 오류가 발생Contravariance 및 Entity Framework 4.0 : EntityCollection을 IEnumerable로 지정하는 방법?
public class ConcreteContainer : IContainer
{
public EntityCollection<ConcreteChild> Children { get; set; }
}
public class ConcreteChild : IChild
{
}
public interface IContainer
{
IEnumerable<IChild> Children { get; set; }
}
public interface IChild
{
}
:
'Demo.ConcreteContainer은' 는 인터페이스 멤버 'Demo.IContainer.Children'를 구현하지 않습니다. 'Demo.ConcreteContainer.Children' 구현할 수 없습니다 'Demo.IContainer.Children' 는 'System.Collections.Generic.IEnumerable'
나의 현재 이해의 일치 반환 형식이 없기 때문에
이 유형의 매개 변수는 공변입니다 : (EntityCollection에 의해 구현됩니다) IEnumerable이 공변하지만 아마도 contravariant 때문이이 것입니다. 즉, 은 지정한 유형이거나 더 많은 유형이 인 파생 형식을 사용할 수 있습니다. 공분산 및 반항에 대한 자세한 내용은 공진 및 공분산 제네릭을 참조하십시오.
나는 그렇다면, 내가 다른 인터페이스 측면에서 순전히 IContainer
인터페이스를 지정하기보다는 구체적인 클래스를 사용하여 내 목표를 달성 할 수있는 방법이 &, 수정 암?
아니면 더 근본적인 것을 오해하고 있습니까?
내 의혹을 확인해 주셔서 감사합니다. 일반 인터페이스 접근법은 훌륭하지만 EF4에서는 작동하지 않습니다. EF4는 단위 테스트를 할 때 EF4를 매우 조롱하게 만듭니다. 결과적으로, 우리는 주로 EF 개체에 대한 통합 테스트로 이동했습니다. –