.NET实体框架工作/模型继承

时间:2016-01-22 13:58:56

标签: c# entity-framework

我已经开始使用Entity框架了,效果很好。我决定创建这样的继承模型....

public class tlkpCafe : EntityAddress
{
    [Key]
    public int CafeId { get; set; }
    [Required]
    public string Cafe { get; set; }
    [EmailAddress]
    public string Email { get; set; }
    [StringLength(100)]
    public string Facebook { get; set; }
    [Url]
    [StringLength(200)]
    public string URL { get; set; }
    [DataType(DataType.DateTime)]
    public DateTime DateCreated { get; set; }
    [DataType(DataType.DateTime)]
    public DateTime DateModified { get; set; }
}

所以咖啡馆有一个单独的“实体地址”类,包含完整的地址,邮政编码等。

这很完美。但是,Ef决定使用一个单独的表来完成这个。它将使用额外的“Discriminator”列映射“实体地址”,以确定该地址属于哪个表。

我的问题是,是否可以存储为平面表,所以一切都还在'tlkpCafe'中?

我认为流畅的API有一些映射指令来执行此操作我无法找到可能实现此目的的代码。

1 个答案:

答案 0 :(得分:0)

在我看来,您的EntityAddress类只是一组要包含在某些实体中而不是实体继承层次结构的字段。

所以我会把答案分成两部分:

  1. 如果我的假设是真的,那么如果你没有将类EntityAddress映射到DbContext(不要声明任何DbSet或该实体的任何配置),那么EF赢了'为这个类创建任何单独的表,但只是将这些字段添加到tlkpCafe表。这是因为您没有声明任何层次结构,并且DbContext不了解EntityAddress类。

  2. 如果您确实需要实体层次结构,那么您应该查看每种类型的表(TPT)与每个层次结构的表(TPH)配置here。您正在寻找的是TPH,但考虑到您将从继承自EntityAddress的所有实体获得一个表