使用Entity Framework Core中的Fluent API配置一对一关系

通常,您不需要手动配置一对一关系,因为EF Core包含一对一关系约定。但是,如果键或外键属性不符合约定,则可以使用数据注释属性或Fluent API来配置两个实体之间的一对一关系。

这篇文章您将学习如何使用Fluent API配置两个实体之间的一对一关系,如果它们不遵循EF Core约定。

通常,您不需要手动配置一对一关系,因为EF Core包含一对一关系约定。但是,如果键或外键属性不符合约定,则可以使用数据注释属性或Fluent API来配置两个实体之间的一对一关系。

让我们进行以下配置间的一种一对一关系StudentStudentAddress实体,不按外键惯例。

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 一对一的关系,使用HasOneWithOneHasForeignKey方法,如下所示。

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)方法指定Student实体StudentAddress使用lambda表达式包含一个引用属性。
  • .WithOne(ad => ad.Student)配置关系的另一端即StudentAddress实体。它指定StudentAddress实体包含Student类型的引用导航属性。
  • .HasForeignKey<StudentAddress>(ad => ad.AddressOfStudentId) 指定外键属性名称。

上面的示例将在数据库中创建以下表:

使用Entity Framework Core中的Fluent API配置一对一关系 1

下图说明了一对一关系的Fluent API配置。

使用Entity Framework Core中的Fluent API配置一对一关系 2

您可以使用StudentAddress相同的方式开始配置实体,如下所示。

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

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

加入电报群

【江湖人士】(jhrs.com)原创文章,作者:江小编,如若转载,请注明出处:https://jhrs.com/2019/27105.html

扫码加入电报群,让你获得国外网赚一手信息。

文章标题:使用Entity Framework Core中的Fluent API配置一对一关系

(0)
江小编的头像江小编
上一篇 2019-03-18 13:31
下一篇 2019-03-20 23:42

热门推荐

Leave a Reply

Sending

国外老牌便宜域名服务商Namecheap注册com域名大优惠,抢到就赚到,优惠码:NEWCOM698
$5.98/年
直达官网