使用 Fluent API 编写一对一关系

Writing One to one relationship using Fluent API

如何使用流利的api写one-to-one--or-zero关系?有人可以帮我纠正我所写的内容。我不确定它是否正确。

场景:一个学生可以有一个或零个地址。

学生模型

    public int Id{ get; set; }
    public string Name{ get; set; }
    public Address Address{ get; set; }

地址模型

    public int Id { get; set; }
    public string Street{ get; set; }
    public int StudentId { get; set; }

    public Student Student { get; set; }

我尝试了什么:

        builder.HasOne(u => u.Address)
        .WithOne(b => b.Student)
        .HasForeignKey<Address>(b => b.StudentId);

如果是 one-to-one--or-zero 关系,您不需要额外的 PrimaryKey 以及依赖 table 的 ForeignKeyPrinciple table 的 Primarykey 也将同时成为受抚养人 table 的 PrimaryKeyForeignKey

所以写你的Address模型class如下:

public class Address
{
   public int StudentId { get; set; } // Here StudentId is the PrimaryKey and ForeignKey at the same time.
   public string Street{ get; set; }

   public Student Student { get; set; }
}

然后在Fluent API配置中:

public class AddressConfiguration : IEntityTypeConfiguration<Address>
{
    public void Configure(EntityTypeBuilder<Address> builder)
    {
        builder.HasKey(u => u.StudentId)
        builder.HasOne(u => u.Student)
               .WithOne(b => b.Address)
               .HasForeignKey<Address>(b => b.StudentId);
    }
}

要使用 fluent api 配置 Student 和 Address 实体之间的 one-to-zero-or-one 关系,您可以使用 HasOptional(s => s.Address) 方法,如

modelBuilder.Entity<Student>()
            .HasOptional(s => s.Address) // Address property is optional in Student entity
            .WithRequired(ad => ad.Student); // Student property is required