我有ThirdParty实体和两个派生实体:Supplier和Customer。
我还有一个名为“工人”的实体,“供应商”为成员:
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”是派生类型,请改用基本类型。
该错误告诉我对于Supplier成员使用ThirdParty类型而不是Supplier类型。但是我希望供应商具有供应商类型,而不是ThirdParty。我怎样才能解决这个问题?
最佳答案
使用ThirdParty的引用(变量)存储属于供应商和客户的成员(抽象类不能具有实例,但可以具有引用)。 ThirdParty的任何虚拟方法都将在Supplier和Customer中都有实现,而ThirdParty,Supplier和Customer的实现都将有所不同,由于多态性,将调用适当的方法。因此,在ThirdParty的引用中从数据库接收它们不会造成任何问题。当然,如果存在不是ThirdParty中存在但供应商或客户中都没有的方法,那么同样会出现小问题,但是您仍然可以始终进行排字。
希望这可以帮助。
关于c# - 在 Entity Framework 中使用派生类而不是抽象类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7378433/