是否可以使用POCO和EF处理以下情况?我想创建一个Vehicles表,其中包含一些布尔字段,例如IsFast,IsVan,IsTruck,然后再创建一个Vehicles类,其中一个从Vehicles类继承的FastVehicle,Van,Truck类,而没有自己的表,并且没有有一个鉴别字段?
就像是:
public class Vehicle
{
public int Id {get; set;}
public bool IsFast {get; set;}
public bool IsTruck {get; set;}
public bool IsVan {get; set;}
}
public class FastVehicle : Vehicle
{
public FastVehicle(){
IsFast = true;
}
}
public class Van: Vehicle{
public Van(){
IsVan = true;
}
}
public class Truck : Vehicle
{
public Truck(){
IsTruck = true;
}
}
然后也许在我的DbContext中有类似以下内容:
public virtual DbSet<Vehicle> Vehicles {get; set;}
public virtual DbSet<Van> Vans => (DbSet<Van>) Vehicles.Where(v => IsVan);
public virtual DbSet<Truck> Trucks => (DbSet<Truck>) Vehicles.Where(v => IsTruck);
public virtual DbSet<FastVehicle> FastVehicles => (DbSet<FastVehicle>) Vehicles.Where(v => IsFastVehicle);
这样的事情可能吗?还是出于某种原因这是一个坏主意?我将如何覆盖OnModelCreating?
最佳答案
如果没有每个类的鉴别器或表,则无法区分您的实体。
如果您在域模型中不需要bool属性,则实际上可以忽略它,因为Entity Framework使用“每个层次结构的表”作为默认值来映射继承。它将自动为您创建一个区分列。
如果将卡车对象添加到DbSet中,它将相应地填充区分符列。
http://weblogs.asp.net/manavi/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-1-table-per-hierarchy-tph
关于c# - EntityFramework,不带鉴别符的继承类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39021172/