一对一关系主要分为以下几点:
- 必须的一对一
- 可选的一对一
必须的一对一
一下是个博客实体对应一个博客头部实体
public class Blog
{
public int Id { get; set; }
public BlogHeader? Header { get; set; }
}
public class BlogHeader
{
public int Id { get; set; }
public int BlogId { get; set; } //外键
public Blog Blog { get; set; } = null!; //导航到Blog实体的导航属性
}
依赖实体必须依赖住实体而存在,配置的时候需要这样配置即可:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.HasOne(e => e.Header)
.WithOne(e => e.Blog)
.HasForeignKey<BlogHeader>(e => e.BlogId)
.IsRequired();
}
可选的一对一
public class Blog
{
public int Id { get; set; }
public BlogHeader? Header { get; set; }
}
public class BlogHeader
{
public int Id { get; set; }
public int? BlogId { get; set; }
public Blog? Blog { get; set; }
}
现在外键属性的导航属性可为空,可以不依赖主实体而存在,所有基本配置如下
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.HasOne(e => e.Header)
.WithOne(e => e.Blog)
.HasForeignKey<BlogHeader>(e => e.BlogId)
.IsRequired(false);
}