当单个实体与任意数量的其他实体关联是,使用一对多的关系,以下介绍一下一对多的关系配置
- 必须的一对多
- 可选的一对多
- 具有阴影外键的必须一对多
- 可选的阴影外键一对多
必须一对多
文章实体:
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…