在 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 Model 和 Motorcycle 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; }
}
我想在 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 Model 和 Motorcycle 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; }
}