2011-09-11 3 views
2

필자는 ThirdParty 엔터티와 두 개의 파생 엔터티 인 Supplier 및 Customer를 보유하고 있습니다.Entity Framework에서 추상 형식 대신 파생 클래스 사용

가 정의 된 EntitySets이 없습니다 : 나는 다음과 같은 예외가 엔티티 프레임 워크를 사용하여 데이터베이스에서 근무를 얻을 때

public abstract class ThirdParty { } 
public class Supplier : ThirdParty { } 
public class Customer : ThirdParty { } 

public class Worker { 
    public virtual string Name {get;set;} 
    public virtual Supplier Supplier {get;set;} 
} 

:
나는 구성원으로 공급하여, 노동자라는 또 다른 실체가 지정된 엔터티 유형 'CompanyData.Supplier'에 대해 'CompanyData.Supplier'가 파생 유형 인 경우 기본 유형을 대신 사용하십시오.

이 오류는 공급 업체 멤버 대신 공급 업체 유형 대신 ThirdParty 유형을 사용하도록 알려줍니다. 그러나 나는 공급자가 ThirdParty가 아닌 Supplier 형식이되기를 원합니다. 이 문제를 어떻게 해결할 수 있습니까?

+1

이러한 모델이 더있다 EF 문제. 정확히 어떤 질문을하고 있습니까? "* 데이터베이스에서 작업자를 얻을 때 ... *"는 특별히 정확하지 않습니다. – Slauma

+0

@Nenil Fenwick : 잘 모르겠습니다. SpeedBirdNine의 대답은 충분했습니다. – Naor

답변

2

ThirdParty의 참조 (변수)를 사용하여 공급 업체 및 고객 (추상 클래스는 인스턴스를 가질 수 없지만 참조를 가질 수 있음)에 속한 멤버를 저장합니다. ThirdParty의 모든 가상 메소드는 공급자와 고객 모두에서 구현되며 ThirdParty, Supplier 및 Customer에 대해 다른 구현을 갖는 메소드는 다형성 때문에 적절한 메소드가 호출됩니다. 따라서 ThirdParty의 참조에서 DB로부터 수신하면 문제가 발생하지 않습니다. 당연히 ThirdParty에 없지만 공급자 또는 고객 모두의 방법이있는 경우 작은 문제가 발생할 수 있지만 항상 다시 입력 할 수 있습니다.

희망이 도움이됩니다.

+0

ThirdParty를 사용하면 효과가 있다는 것을 알고 있습니다. 그러나 ThirdParty가 아닌 Supplier에 대한 언급이 필요합니다. 고객에게 참조 허용을 원하지 않습니다. – Naor

+0

당신은이 – SpeedBirdNine

+0

에 대한 런타임 형식 식별을 할 수 있습니다. this 또는 typeof를 사용합니다. – SpeedBirdNine

관련 문제