一对一
在“一对多”的关系中,很显然是需要在“多”端有一个指向“一”端的列,因此除非我们需要显式的声明一个外键属性,否则EF Core会自动在“多”端的表中生成一个指向“一”端的外键列,不需要我们显式的声明一个外键属性。
对于一对一关系,由于双方是“平等”的关系,外键列可以建在任意一方,因此必须显式的在其中一个实体类中声明一个外键属性。
class Order
{
public long Id { get; set; }
public string Name { get; set; }
public string Address { get; set; }
public Delivery Delivery { get; set;}
}
class Delivery
{
public long Id { get; set; }
public string CompanyName { get; set; }
public String Number { get; set; }
public Order Order { get; set; }
public long OrderId { get; set; }
}
EFCore表关系的配置
builder
.HasOne<Delivery>(o => o.Delivery)
.WithOne(d => d.Order)
.HasForeignKey<Delivery>(d=>d.OrderId);
多对多
需要中间表
class Student
{
public long Id { get; set; }
public string Name { get; set; }
public List<Teacher> Teachers { get; set; } = new List<Teacher>();
}
class Teacher
{
public long Id { get; set; }
public string Name { get; set; }
public List<Student> Students { get; set; } = new List<Student>();
}
配置文件中,多对多的关系配置可以放到任何一方的配置类中,这里把关系配置代码放到了Student类的配置中。
builder
.HasMany<Teacher>(s => s.Teachers)
.WithMany(t=>t.Students)
.UsingEntity(j=>j.ToTable("T_Students_Teachers"));