Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架下基于TPT设计的多级继承_C#_Entity Framework_Multiple Inheritance_Table Per Type - Fatal编程技术网

C# 实体框架下基于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 {

我想在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 { 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设计也是我的目标。