Entity framework 实体框架的标准继承

Entity framework 实体框架的标准继承,entity-framework,Entity Framework,我有一个基类,我们称它为BaseEntityModel,它是抽象的,有一个Id属性: public abstract class BaseEntityModel { public int Id { get; set; } } 我还有一门课: public class CarEntityModel : BaseEntityModel { public int Year { get; set; } } 我只想要一张桌子:CarEntityModel。表中应该有一列id和年份。所以

我有一个基类,我们称它为BaseEntityModel,它是抽象的,有一个Id属性:

public abstract class BaseEntityModel
{
    public int Id { get; set; }
}
我还有一门课:

public class CarEntityModel : BaseEntityModel
{
    public int Year { get; set; }
}

我只想要一张桌子:CarEntityModel。表中应该有一列id和年份。所以这不是每个层次结构的表,也不是每个类型的表。这可能吗?它是如何命名的?

每个混凝土的表和每个层次结构的表,在这种情况下都将生成一个具有Id和年份的表。但是,对于每个具体类型的表,只要引入从BaseEntityModel继承的另一个类型,就会有第二个表

为id和年份设置一列。所以这不是每个层次的表

这正是每个层次结构的表所做的。如果有两种不同的类型,继承自公共基类,则所有类型的所有列都表示在一个表中

每个层次结构的表:

每种混凝土的表:


不过,我要提醒您避免使用实体框架进行继承。我曾经试图这样做是为了产生一个非常令人愉快的面向对象设计,但是它产生的查询执行得非常糟糕。每个层次结构的表是一种可怕的结构,因为在这两种类型之间没有使用某些列,这使得表结构具有误导性。其他继承方法生成联合查询,我发现它是跨基类型最常用的casesquerying。我非常喜欢英孚对遗产的支持,过了一段时间,我终于放弃了那份苦涩甜蜜的爱。

谢谢你的帮助。我有一种感觉,当使用EF时,你被迫违反OOP:.MyvioO77,但在OOP中考虑鼓励使用构图而不是继承。如果我有一个Vehicaly、Car:Vehicle和Truck:Vehicle,通常我有一个表来表示Vehicle,然后分别与Car和Truck建立1到1/0的关系,在Vehicle表上有一个VehicleType。它并不完美,因为您仍然必须基于类型有条件地进行连接,但通常您要么查询所有车辆,要么只查询特定类型的车辆。您几乎从未遇到过同时检索某些特定于汽车的列和特定于卡车的列的查询。