继承
按照约定,EF 仅会在模型中显式包括两个或更多个继承类型时设置继承。EF 不会自动扫描未在模型中包括的基类型或派生类型。
可以通过为继承层次结构中的每个类型公开 DbSet,在模型中包括类型:
class MyContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
public DbSet<RssBlog> RssBlogs { get; set; }
}
public class Blog
{
public int BlogId { get; set; }
public string Url { get; set; }
}
public class RssBlog : Blog
{
public string RssUrl { get; set; }
}Code language: HTML, XML (xml)
此模型映射到下面的数据库架构(请注意隐式创建的鉴别器列,该列标识每个行中存储的博客类型):
同名列映射
默认情况下,当层次结构中的两个同级实体类型具有相同的属性时,它们将映射到两个单独的列。但是,如果它们的类型相同,则可以映射到相同的数据库列:
public class MyContext : DbContext
{
public DbSet<BlogBase> Blogs { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.Property(b => b.Url)
.HasColumnName("Url");
modelBuilder.Entity<RssBlog>()
.Property(b => b.Url)
.HasColumnName("Url");
}
}
public abstract class BlogBase
{
public int BlogId { get; set; }
}
public class Blog : BlogBase
{
public string Url { get; set; }
}
public class RssBlog : BlogBase
{
public string Url { get; set; }
}Code language: HTML, XML (xml)