我们有一个像Vehicle这样的实体,还有三个派生实体,比如Car、Motorbike和Bicycle。这个继承层次结构是用TPH实现的。
以下是实体映射条件:
__disc__ = car__disc__ = motorbike__disc__ = bicycle
如何从Vehicle类MotorVehicle派生另一个具有以下映射条件的子级:__disc__ = car OR motorbike for MotorVehicle当我使用TPT使用这个结构时,我会在数据库中这样查看
SELECT Id
FROM Vehicles
WHERE (__Disc__ = N'car') OR (__Disc__ = N'motorbike')我认为TPH不需要这种观点。
请注意,i不能改变这样的继承:车辆<--机动车<--汽车。不要把汽车当成汽车和其他孩子的父母,因为汽车、摩托车和自行车已经存在了。我只想给所有的机动车辆分配一些业务。
发布于 2012-10-18 23:41:22
为什么不能在类层次结构中引入MotorVehicle级别?你可以的。它只是一个抽象类,所以它不需要一个判别器值。英孚几乎没注意到这门课!
我尝试使用和不使用MotorVehicle类,数据库结构和定义的鉴别器的数量在这两种情况下都是相同的。
编辑
我就是这样做的:
public abstract class Vehicle
{
public int Id { get; set; }
public string Name { get; set; }
}
public abstract class MotorVehicle : Vehicle
{
public int Hp { get; set; }
}
public class Car : MotorVehicle
{ }
public class MotorBike : MotorVehicle
{ }
public class Bicycle : Vehicle
{ }
internal class NestedInheritanceContext : DbContext
{
public DbSet<Vehicle> Vehicles { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Vehicle>().Property(v => v.Name).IsRequired();
modelBuilder.Entity<Car>().Map(m => m.Requires("Discriminator")
.HasValue("car").HasColumnType("char")
.HasMaxLength(10)
.IsRequired());
modelBuilder.Entity<MotorBike>().Map(m => m.Requires("Discriminator")
.HasValue("motorbike"));
modelBuilder.Entity<Bicycle>().Map(m => m.Requires("Discriminator")
.HasValue("bicycle"));
base.OnModelCreating(modelBuilder);
}
}https://stackoverflow.com/questions/12953428
复制相似问题