使用Entity框架进行标准继承

时间:2014-08-07 16:09:38

标签: entity-framework

我的基类(我们称之为BaseEntityModel)是抽象的并且具有Id属性:

public abstract class BaseEntityModel
{
    public int Id { get; set; }
}

我有另一个班级:

public class CarEntityModel : BaseEntityModel
{
    public int Year { get; set; }
}

我想只获得一个表:CarEntityModel。该表应该有一个id和年份的列。所以这不是Table Per Hierarchy,也不是Table Per Type。这可能吗?怎么称呼?

1 个答案:

答案 0 :(得分:0)

每个具体的表和每个层次的表,在这种情况下都会产生一个包含Id和Year的表。但是,对于每个Concrete类型的表,只要引入从BaseEntityModel继承的另一个类型,就会有第二个表。

“有一个id和年份的列。所以这不是Table Per Hierarchy”

这正是Table Per层次结构的作用。如果您有两种不同的类型,继承自公共基类,则所有类型的所有列都在一个表中表示。

每个层次结构表: http://weblogs.asp.net/manavi/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-1-table-per-hierarchy-tph

每种混凝土表: http://weblogs.asp.net/manavi/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-3-table-per-concrete-type-tpc-and-choosing-strategy-guidelines

我会提醒您避免使用Entity Framework进行继承。我曾经试图这样做是为了产生一个非常令人满意的面向对象设计,但它产生的查询表现非常糟糕。表每个层次结构是一个可怕的结构IMO,因为在两种类型之间没有使用某些列,使得表结构具有误导性。其他继承方法为我发现的最常见的用例(查询基类型)生成UNION查询。我非常喜欢EF对继承的支持,过了一段时间我终于让这种痛苦的甜蜜爱情去了。