首页 文章

在Entity Framework中使用派生类而不是抽象类型

提问于
浏览
2

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

2 回答

  • 1

    使用ThirdParty的引用(变量)来存储属于Supplier和Customer的成员(抽象类不能有实例但可以有引用) . ThirdParty的任何虚拟方法都将在供应商和客户中实现,并且对于ThirdParty,供应商和客户具有不同实现的任何方法,将因多态性而调用适当的方法 . 因此,在ThirdParty的参考中从DB接收它们不会导致任何问题 . 当然,如果有一些方法不在ThirdParty中,而是在供应商或客户中,那么就会出现小问题,但是你可以再次打字 .

    希望这可以帮助 .

  • 2

    听起来您需要在实体模型定义中添加 Table Per Hierarchy (TPH) 定义 . (将派生类型的所有数据存储在一个表中)

    以下是一些可能有助于您进行设置的链接:

    Walkthrough: Mapping Inheritance - Table-per-Hierarchy (Entity Data Model Tools)

    How to: Define a Model with Table-per-Hierarchy Inheritance

    How to choose an Inheritance Strategy

相关问题