创建模型

数据表

学生信息管理系统中,共有4张表需要创建。

  • 专业表:存储专业相关信息
  • 年级表:存储年级相关信息
  • 班级表:存储班级相关信息
  • 学生表:存储学生相关信息

E-R图如下所示。

13bc99e8-e17e-4739-bab1-94e06334e374

其中,1个专业包含多个班级,1个年级也包含多个班级,年级和专业之间是多对多的关系,1个班级中包含多个学生。

创建模型文件夹

在项目根目录下创建一个名为Models的文件夹。

右键点击Models文件夹,选择【添加-】,选择,名称填写Major.cs,点击添加

重复此过程,创建Grade.csClass.csStudent.cs

注意Class要大写,小写的class是C#的关键字

创建专业模型

在E-R图中,专业只有一个专业名称属性,因此,需要在专业模型中添加一个string类型的Name属性。

除此之外,模型还需要一个主键,因此,还需要添加一个Guid类型的Id属性。

Guid是一个128位的随机数,基本上不用担心会重复

最后,由于专业和班级是1对多的关系,因此还需要添加一个班级列表类型的属性作为导航

最终代码如下:

public class Major
{
    public Guid Id { get; set; }
    public string Name { get; set; } = string.Empty;
    public List<Class> Classes { get; } = new List<Class>();
}

创建年级模型

年级模型和专业模型几乎一样,因此可以直接将专业模型的代码复制,最终代码如下:

public class Grade
{
    public Guid Id { get; set; }
    public string Name { get; set; } = string.Empty;
    public List<Class> Classes { get; } = new List<Class>();
}

创建班级模型

首先需要在班级模型中添加一个Name属性和Id属性。

由于专业和班级之间是1对多的关系,还需要添加Guid类型的MajorId作为外键。

由于年级和班级之间也是1对多的关系,也需要添加Guid类型的GradeId作为外键。

除此之外,还需要添加班级模型专业模型以及班级模型年级模型的导航,因此还需要添加一个Major类型的属性Major以及一个Grade类型的属性Grade

最后,由于班级和学生之间是1对多的关系,因此还需要添加一个学生列表类型的属性作为导航

最终代码如下:

public class Class
{
    public Guid Id { get; set; }
    public string Name { get; set; } = string.Empty;
    public Guid MajorId { get; set; }
    public Guid GradeId { get; set; }
    public Major Major { get; set; } = null!;
    public Grade Grade { get; set; } = null!;
    public List<Student> Students { get; } = new List<Student>();
}

创建学生模型

首先还是需要一个Guid类型的Id作为主键。

然后,根据E-R图,还需要创建一个学号属性Number。学号用int类型肯定是不够的,因为会超范围,因此可以使用long类型。但是,极端情况下long类型可能也无法存储某些学校的学号,因此这里我最终选择了string类型存储学号。

姓名属性Name还是使用string类型。

性别属性Gender可以使用bool类型存储。

生日属性Birthday可以使用DateTime类型存储。

然后添加班级模型的Id作为外键,以及添加学生模型班级模型导航

最终代码如下:

public class Student
{
    public Guid Id { get; set; }
    public string Number { get; set; } = string.Empty;
    public string Name { get; set; } = string.Empty;
    public bool Gender { get; set; }
    public DateTime Birthday { get; set; }
    public Guid ClassId { get; set; }
    public Class Class { get; set; } = null!;
}