继承

EF 模型中的继承被用来控制实体类型继承在数据库中的表现方式。

惯例

按照惯例,由数据库提供程序决定继承在数据库中的表示。查看 继承(关系数据库) 以了解关系数据库提供程序是如何处理继承的。

EF 将只会在两个或多个继承类型被显式包含到模型中时建立继承,它不会扫描未包含在模型中的基础或派生类型。可以通过为类层次结构中的每个类型暴露 DbSet 来将类型包含到模型中。

  1. class MyContext : DbContext
  2. {
  3. public DbSet<Blog> Blogs { get; set; }
  4. public DbSet<RssBlog> RssBlogs { get; set; }
  5. }
  6. public class Blog
  7. {
  8. public int BlogId { get; set; }
  9. public string Url { get; set; }
  10. }
  11. public class RssBlog : Blog
  12. {
  13. public string RssUrl { get; set; }
  14. }

如果你不希望暴露类层次中的某个或某些类型的 DbSet,你可以使用流式 API 来确保他们包含在模型中。

  1. class MyContext : DbContext
  2. {
  3. public DbSet<Blog> Blogs { get; set; }
  4. protected override void OnModelCreating(ModelBuilder modelBuilder)
  5. {
  6. modelBuilder.Entity<RssBlog>();
  7. }
  8. }

数据注解

不能使用数据注解来配置继承。

流式 API

用于配置继承的流式 API 依赖于你使用的数据库提供程序。查看 继承(关系数据库) 可了解在关系数据库提供程序下你能做的配置。