是否可以使用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/

10-13 03:15