efcore一对多基本关系配置

190 阅读1分钟

当单个实体与任意数量的其他实体关联是,使用一对多的关系,以下介绍一下一对多的关系配置

  • 必须的一对多
  • 可选的一对多
  • 具有阴影外键的必须一对多
  • 可选的阴影外键一对多

必须一对多

文章实体:

public class Post
{
    public int Id { get; set; }
    public int BlogId { get; set; }
    public Blog Blog { get; set; }
}

博客实体:

public class Blog
{
    public int Id { get; set; }
    public ICollection<Post> Posts { get; set; } = [];
}

在这两个实体中一对多Post实体的Blog属性和Blog实体的Posts的集合导航属性是可选的,所以显示配置关系如下:

protected override void OnModelCreating(ModelBuilder buider)
{
    buider.Entity<Blog>().HasMany(x => x.Posts).WithOne(x => x.Blog)
        .HasForeignKey(x => x.BlogId).IsRequired();

}

在这个必须的一对多中,Post实体是依赖于Blog实体而存在的

可选的一对多

文章实体:

public class Post
{
    public int Id { get; set; }
    public int? BlogId { get; set; }
    public Blog? Blog { get; set; }
}

博客实体:

public class Blog
{
    public int Id { get; set; }
    public ICollection<Post> Posts { get; set; } = [];
}

配置的可选的一对多配置关系如下:

protected override void OnModelCreating(ModelBuilder buider)
{
    buider.Entity<Blog>().HasMany(x => x.Posts).WithOne(x => x.Blog)
        .HasForeignKey(x => x.BlogId).IsRequired(false);

}

具有阴影外键的必须一对多

public class Blog
{
    public int Id { get; set; }
    public ICollection<Post> Posts { get; } = new List<Post>(); 
}

public class Post
{
    public int Id { get; set; }
    public Blog Blog { get; set; } = null!; 
}

配置关系如下:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Blog>()
        .HasMany(e => e.Posts)
        .WithOne(e => e.Blog)
        .HasForeignKey("BlogId")
        .IsRequired();
}

具有阴影外键的可选一对多

public class Blog
{
    public int Id { get; set; }
    public ICollection<Post> Posts { get; } = new List<Post>();
}

public class Post
{
    public int Id { get; set; }
    public Blog? Blog { get; set; } 
}

配置如下:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Blog>()
        .HasMany(e => e.Posts)
        .WithOne(e => e.Blog)
        .HasForeignKey("BlogId")
        .IsRequired(false);
}

以上就是efcore的基本一对多关系,更多的可以去官方网站查看learn.microsoft.com/zh-cn/ef/co…