乐趣区

Entity-Framework基础6Entity-Framework中的实体

什么是 Entity Framework 中的实体?

Entity Framework 中的实体是映射到数据库表的类。这个类必须作为 DbSet<TEntity> 类型属性被包含在 DbContext 类中。EF API 将每个实体映射到表,并将实体的每个属性映射到数据库中的列。

举个例子,以下 StudentGradeschool application 中的领域类。

public class Student
{public int StudentID { get; set;}
    public string StudentName {get; set;}
    public DateTime? DateOfBirth {get; set;}
    public byte[]  Photo { get; set;}
    public decimal Height {get; set;}
    public float Weight {get; set;}
        
    public Grade Grade {get; set;}
}

public class Grade
{public int GradeId { get; set;}
    public string GradeName {get; set;}
    public string Section {get; set;}

    public ICollection<Student> Students {get; set;}
}   

当上述类作为 DbSet<TEntity> 属性包含在上下文类(从 DbContext 派生的类)中时,它们将成为实体,如下所示。

public class SchoolContext : DbContext
{public SchoolContext()
    { }

    public DbSet<Student> Students {get; set;}
    public DbSet<Grade> Grades {get; set;}
}

在上面的上下文类中,DbSet<TEntity>类型的 StudentsGrades属性称为实体集。StudentsGrades 是实体。EF API 将在数据库中创建 Students 表和 Grades 表,如下所示。


实体可以包括两种类型的属性:标量属性和导航属性。

标量属性

基本类型属性称为标量属性。每个标量属性都映射到数据库表中存储实际数据的列。举个例子,StudentIDStudentNameDateOfBirthPhotoHeightWeightStudent 实体类中的标量属性。

public class Student
{
    // scalar properties
    public int StudentID {get; set;}
    public string StudentName {get; set;}
    public DateTime? DateOfBirth {get; set;}
    public byte[]  Photo { get; set;}
    public decimal Height {get; set;}
    public float Weight {get; set;}
        
    //reference navigation properties
    public Grade Grade {get; set;}
}

EF API 将在数据库表中为每个标量属性创建一个列,如下所示。

导航属性

导航属性表示与另一个实体的关系。

导航属性有两种类型:参考导航和集合导航

参考导航属性

如果实体包含另一实体类型的属性,则称为参考导航属性。它指向单个实体,并表示实体关系中一个实体多重性。

EF API 会在表中为导航属性创建一个外键列,该列指向数据库中另一个表的主键。举个例子,Grade是以下 Student 实体类中的参考导航属性。

public class Student
{
    // scalar properties
    public int StudentID {get; set;}
    public string StudentName {get; set;}
    public DateTime? DateOfBirth {get; set;}
    public byte[]  Photo { get; set;}
    public decimal Height {get; set;}
    public float Weight {get; set;}
        
    //reference navigation property
    public Grade Grade {get; set;}
}

在数据库中,EF API 将在 Students 表中创建外键Grade_GradeId,如下所示。

集合导航属性

如果实体包含实体类型的泛型集合的属性,则称为集合导航属性。它代表许多的多样性。

EF API 不会为实体的相关表中的集合导航属性创建任何列,但它在泛型集合的实体表中创建了一列。举个例子,以下 Grade 实体包含泛型集合导航属性 ICollection<Student>。这里,Student 实体被指定为泛型类型,因此 EF API 将在数据库的 Students 表中创建一个 Grade_GradeId 列。


详细了解导航属性如何在定义实体关系中发挥重要作用。

退出移动版