Entityframework 4.3 codefirst使用TPT和鉴别器

时间:2013-01-13 10:31:28

标签: entity-framework ef-code-first table-per-type discriminator

我有这三种模式:

public class Equipment
{
    public int ID { get; set; }
    public string title { get; set; }

}

[Table("Vessels")]
public class Vessel:Equipment
{
    public string Size { get; set; }

}

[Table("Tubes")]
public class Tube : Equipment
{
    public string Pressure{ get; set; }

}

我想显示一个包含2列标题和类型的设备列表。

例如:

Title        Type
------       -------
101-1        vessel
101-2        vessel
102-3        tube

我不知道如何在Equipments中制作一个鉴别器列来显示每种设备的类型。

EDITED

如果我在装备实体中有一个鉴别器,如:

public class Equipment
{
    public int ID { get; set; }
    public string title { get; set; }
    public string type{ get; set; }  //as discriminator
}

我可以在控制器或存储库中获取查询,如下所示:

var equipments=from e in db.Equipments
               select e;

1 个答案:

答案 0 :(得分:1)

您无法根据EF映射制作鉴别器列 - TPT继承不支持它,因为鉴别器是子表。您可以尝试使用以下内容:

public abstract class Equipment
{
    public int ID { get; set; }
    public string title { get; set; }

    [NotMapped]
    public abstract string Type { get; }
}  

并覆盖子类型中的Type属性以获取正确的名称。您将无法在Linq-to-Entities查询中使用该属性,因为它未映射。