Entity Framework Core 引入了默认约定,这些约定自动配置两个实体之间的一对一关系(EF 6.x或先前不支持一对一关系的约定)。
在EF Core中,一对一关系需要两侧的参考导航属性。以下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 StudentId { get; set; }
public Student Student { get; set; }
}
在上面的示例中,Student
实体包括类型的引用导航属性,StudentAddress
并且StudentAddress
实体包括外键属性StudentId
及其对应的引用属性Student
。这将导致相应表Students
和StudentAddresses
数据库中的一对一关系,如下所示。
EF Core StudentId
在StudentAddresses
表中的NotNull外键列上创建唯一索引,如上所示。这确保了外键列的值StudentId
在StudentAddress
表中必须是唯一的,这是一对一关系所必需的。
注意: Entity Framework Core支持唯一约束,但EF 6中不支持,这就是为什么EF Core包含一对一关系但不包括EF 6.x的约定。
如果实体不遵循约定,请使用Fluent API配置一对一关系。
进一步阅读
- 使用Fluent API配置一对一关系
- 使用Fluent API配置一对多关系
- 使用Fluent API配置多对多关系