在 Entity Framework 中使用 TPT 设计的多级继承

Multilevel inheritance using TPT design in Entity Framework

我想在 EF 中实现以下模型作为 TPT 设计。

我的代码如下:

基础模型

public abstract class Product
{
    public int Id { get; set; }
    public DateTime ProductionDate { get; set; }
}

车型

public abstract class Car : Product
{
    public string ChassisNumber { get; set; }
    public string DriverName { get; set; }
}

[Table("TeslaCars")]
public class TeslaCar : Car
{
    public string Battery { get; set; }
    public int Temperature { get; set; }
}

[Table("PorscheCars")]
public class PorscheCar : Car
{
    public int FuelTank { get; set; }
}

摩托车款

public abstract class Motorcycle : Product
{
    public string RiderName { get; set; }
    public bool IsRacing { get; set; }
}

[Table("CrossMotorcycles")]
public class CrossMotorcycle : Motorcycle
{
    public int MaximumJump { get; set; }
}

[Table("KipsMotorcycles")]
public class KipsMotorcycle : Motorcycle
{
    public long MaximumSpeed { get; set; }
}

但问题是,在创建表之后,只进行了 TPT 设计的最后一步,即创建了 TPH 设计之上的层。

我的代码输出如下表:

我应该如何修改代码以在表格的所有级别都遵循 TPT 设计? 在最终输出中,我需要制作如下表格:

终于找到答案了!

在这种情况下,我需要将 Car ModelMotorcycle Model 唯一字段放在单独的表中,但是上面的代码是默认使用 TPH 设计制作。

所以我们必须这样更改代码:

基础模型

public abstract class Product
{
    public int Id { get; set; }
    public DateTime ProductionDate { get; set; }
}

车型

[Table("Cars")]
public abstract class Car : Product
{
    public string ChassisNumber { get; set; }
    public string DriverName { get; set; }
}

[Table("TeslaCars")]
public class TeslaCar : Car
{
    public string Battery { get; set; }
    public int Temperature { get; set; }
}

[Table("PorscheCars")]
public class PorscheCar : Car
{
    public int FuelTank { get; set; }
}

摩托车款

[Table("Motorcycles")]
public abstract class Motorcycle : Product
{
    public string RiderName { get; set; }
    public bool IsRacing { get; set; }
}

[Table("CrossMotorcycles")]
public class CrossMotorcycle : Motorcycle
{
    public int MaximumJump { get; set; }
}

[Table("KipsMotorcycles")]
public class KipsMotorcycle : Motorcycle
{
    public long MaximumSpeed { get; set; }
}