c# - EntityFramework,没有鉴别器的继承类

标签 c# entity-framework entity-framework-6

是否可以使用 POCO 和 EF 来处理以下情况?我想要一个车辆表,其中包含一些 bool 字段,例如 IsFast、IsVan、IsTruck,然后有一个车辆类,其中包含从车辆类继承的 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/

相关文章:

c# - 将 LINQ 查询转换为字符串,发送到远程服务器以使用 Roslyn 解析为表达式?

c# - 页面可以选择退出 IIS 7 压缩吗?

entity-framework - Entity Framework 相关代码从c#改写到f#的难度

c# - Model和ViewModel一模一样怎么办?

razor - 在身份3中创建声明身份

c# - 在 C# 项目的 Visual Studio 中,要中断的异常列表存储在哪里?

c# - 为什么用户自定义类没有 "declared but never used"警告?

sql-server - 在 Entity Framework 中使用 savechanges() 时列名称无效

c# - Database.BeginTransaction 与 Transactions.TransactionScope

c# - 对象中的 EF6 AddOrUpdate 对象