我有ThirdParty实体和两个派生实体:供应商和客户 我有另一个名为Worker的实体,供应商是其成员:
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;}
}
当我使用实体框架从数据库中获取Worker时,我得到以下异常:
没有为指定的实体类型'CompanyData.Supplier'定义EntitySet。如果'CompanyData.Supplier'是派生类型,请改用基类型。
错误告诉我对供应商成员使用ThirdParty类型而不是供应商类型。但我希望供应商与供应商类型而不是ThirdParty。我该如何解决这个问题?
答案 0 :(得分:2)
使用ThirdParty的引用(变量)来存储属于Supplier和Customer的成员(抽象类不能包含实例但可以包含引用)。 ThirdParty的任何虚拟方法都将在供应商和客户中实现,并且对于ThirdParty,供应商和客户具有不同实现的任何方法,将因多态性而调用适当的方法。因此,在ThirdParty的参考中从DB接收它们不会导致任何问题。当然,如果有一些方法不在ThirdParty中,但在供应商或客户中,那么就会出现小问题,但同样你可以随时打字。
希望这有帮助。
答案 1 :(得分:1)
听起来您需要在实体模型定义中添加每个层次结构表(TPH)定义。 (将派生类型的所有数据存储在一个表中)
以下是一些可能有助于您进行设置的链接:
Walkthrough: Mapping Inheritance - Table-per-Hierarchy (Entity Data Model Tools)