使用实体框架中的TPT设计进行多级继承

问题描述 投票:2回答:1

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

enter image description here

我的代码如下:

基本模型

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设计之上创建了层。

我的代码输出如下表:enter image description here

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

enter image description here

c# entity-framework multiple-inheritance table-per-type
1个回答
1
投票

我终于得到答案了!

在这种情况下,我需要在单独的表中创建汽车模型摩托车模型的唯一字段,但是以上代码默认是通过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; }
}
© www.soinside.com 2019 - 2024. All rights reserved.