Entity Framework Core系列教程-14-Fluent API 配置一对一关系

Entity Framework Core Fluent API 配置一对一关系

在这里,您将学习如何使用Fluent API配置两个实体之间的一对一关系(如果它们不遵循EF Core约定)。
通常,您不需要手动配置一对一关系,因为EF Core包含一对一关系的约定。但是,如果键或外键属性不遵循约定,则可以使用数据注释属性或Fluent API在两个实体之间配置一对一关系。
让我们在以下不遵循外键约定的Student和StudentAddress实体之间配置一对一关系。

public class Student
{
    public int Id { get; set; }
    public string Name { get; set; }
       
    public StudentAddress Address { get; set; }
}

public class StudentAddress
{
    public int StudentAddressId { get; set; }
    public string Address { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string Country { get; set; }

    public int AddressOfStudentId { get; set; }
    public Student Student { get; set; }
}

要在EF Core中使用Fluent API配置一对一关系,请使用HasOne,WithOne和HasForeignKey方法,如下所示:

public class SchoolContext : DbContext
{
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer("Server=.\\SQLEXPRESS;Database=EFCore-SchoolDB;Trusted_Connection=True");
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Student>()
            .HasOne<StudentAddress>(s => s.Address)
            .WithOne(ad => ad.Student)
            .HasForeignKey<StudentAddress>(ad => ad.AddressOfStudentId);
    }

    public DbSet<Student> Students { get; set; }
    public DbSet<StudentAddress> StudentAddresses { get; set; }
}

在上面的示例中,以下代码片段配置了一对一关系:

modelBuilder.Entity<Student>()
    .HasOne<StudentAddress>(s => s.Address)
    .WithOne(ad => ad.Student)
    .HasForeignKey<StudentAddress>(ad => ad.AddressOfStudentId);

让我们逐步分析代码:
modelBuilder.Entity<Student>()开始配置Student实体。
.HasOne<StudentAddress>(s => s.Address) 方法使用lambda表达式指定Student实体包括一个StudentAddress引用属性。
.WithOne(ad => ad.Student) 配置关系的另一端,StudentAddress实体。它指定StudentAddress实体包括Student类型的参考导航属性。
.HasForeignKey<StudentAddress>(ad => ad.AddressOfStudentId)指定外键属性名称。
现在,要将其反映在数据库中,请执行迁移命令,add-migration <名称>和update-database。该数据库将包括两个具有一对一关系的表,如下所示。
在这里插入图片描述
下图说明了一对一关系的Fluent API配置:
在这里插入图片描述
您可以按照以下相同的方式开始使用StudentAddress实体进行配置。

modelBuilder.Entity<StudentAddress>()
    .HasOne<Student>(ad => ad.Student)
    .WithOne(s => s.Address)
    .HasForeignKey<StudentAddress>(ad => ad.AddressOfStudentId);

因此,您可以在Entity Framework Core中配置一对一关系。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值