2011-09-11 39 views
2

我有ThirdParty实体和两个派生实体:供应商和客户。
我叫工人另一个实体,与供应商的一员:在实体框架中使用派生类而不是抽象类型

没有定义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。我怎样才能解决这个问题?

+1

这种模式是不EF的问题。你究竟在做什么查询? “*当我从数据库中获得Worker时* ...”不是特别精确。 – Slauma

+0

@尼尔芬维克:我不知道。 SpeedBirdNine的答案足够好。 – Naor

回答

2

使用ThirdParty的引用(变量)来存储属于供应商和客户(抽象类不能有实例但可以有引用)的成员。 ThirdParty的任何虚拟方法都将在供应商和客户中实现,并且对于ThirdParty,供应商和客户具有不同实现的任何方法,适当的方法将由于多态性而被调用。因此,从ThirdParty的引用中从DB接收它们不会导致任何问题。当然,如果方法不在ThirdParty中,但在供应商或客户中,但仍然可以始终进行typcast,那么会出现小问题。

希望这会有所帮助。

+0

我知道使用ThirdParty将会起作用。但我需要参考供应商而不是ThirdParty。我不想让客户参考。 – Naor

+0

您可以为此运行时类型标识 – SpeedBirdNine

+0

使用is或typeof这个 – SpeedBirdNine

相关问题