C# 实体框架下基于TPT设计的多级继承
我想在EF中实现以下模型作为TPT设计 我的代码如下: 基本型号C# 实体框架下基于TPT设计的多级继承,c#,entity-framework,multiple-inheritance,table-per-type,C#,Entity Framework,Multiple Inheritance,Table Per Type,我想在EF中实现以下模型作为TPT设计 我的代码如下: 基本型号 public abstract class Product { public int Id { get; set; } public DateTime ProductionDate { get; set; } } public abstract class Product { public int Id { get; set; } public DateTime ProductionDate {
public abstract class Product
{
public int Id { get; set; }
public DateTime ProductionDate { get; set; }
}
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; }
}
[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; }
}
摩托车型号
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; }
}
[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; }
}
但问题是,在创建表之后,只有TPT设计的最后一步,TPH设计之上的层被创建
我的代码输出如下表所示:
我应该如何修改代码以在所有级别的表中遵循TPT设计?
在最终输出中,我需要制作以下表格:
我终于得到了答案 在这种情况下,我需要在单独的表中设置汽车型号和摩托车型号的唯一字段,但是上面的代码默认使用TPH设计 因此,我们必须以这种方式更改代码: 基本型号
public abstract class Product
{
public int Id { get; set; }
public DateTime ProductionDate { get; set; }
}
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; }
}
[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; }
}
摩托车型号
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; }
}
[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 Core,我相信它仍然只支持TPH。EF6支持TPH和TPT。我的项目是ASP.NETMVC5,我使用的是EF(不是EF核心)。在EF支持两者的同时,实现TPT设计也是我的目标。