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

本文关键字:模型 继承 工作 实体 框架 NET | 更新日期: 2023-09-27 18:31:24

我已经开始使用实体框架,它工作得很好。我决定创建这样的继承模型......

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 决定使用单独的表来解决这个问题。它将使用额外的"鉴别器"列映射"实体地址",以确定地址属于哪个表。

我的问题是,是否可以存储为一张平坦的桌子,所以所有东西都还在"tlkpCafe"中?

我假设流畅的 API 有某种映射指令来执行此操作,但我无法找到可能完成此操作的代码。

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

在我看来

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

所以我将答案一分为二:

  1. 如果我的假设是正确的,那么如果您没有将类 EntityAddress 映射到 DbContext(不要为此实体声明任何 DbSet 或任何配置),那么 EF 不会为此类创建任何单独的表,而只是将这些字段添加到 tlkpCafe 表中。这是因为您没有声明任何层次结构,并且 DbContext 不知道 EntityAddress 类。

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