最近通过WPF开发项目,为了对WPF知识点进行总结,所以利用业余时间,开发一个学生信息管理系统【Student Information Management System】。上一篇文章进行了框架搭建和模块划分,本文在前一篇基础之上,继续深入开发学生信息管理系统的数据库和WebApi接口搭建相关内容,仅供学习分享使用,如有不足之处,还请指正。
涉及知识点
本篇内容主要是数据库的操作和WebApi的创建,涉及到知识点如下所示:
- 数据库知识,基于SQL Server 2012的数据表创建,以及CRUD【(Create)、检索(Retrieve)、更新(Update)和删除(Delete)】等基础操作。
- WebApi接口创建基础操作,本文会涉及到通过WebApi提供数据接口给客户端,用于封装数据持久化的操作。
数据库相关
在学生信息管理系统中,学生,班级,课程,成绩等内容和管理模块的相关内容,都离不开数据库的支持,所以数据是支撑,页面是对数据的展示。数据库结构,如下所示:
主要涉及的表如下所示:
1. 学生表Student
学生表主要存储学生的基础信息,如下所示:
学生表创建语句,如下所示:
1. USE [SIMS] 2. GO 3. 4. /****** Object: Table [dbo].[Students] Script Date: 2022/5/25 0:11:41 ******/ 5. SET ANSI_NULLS ON 6. GO 7. 8. SET QUOTED_IDENTIFIER ON 9. GO 10. 11. SET ANSI_PADDING ON 12. GO 13. 14. CREATE TABLE [dbo].[Students]( 15. [Id] [int] IDENTITY(1,1) NOT NULL, 16. [No] [varchar](50) NULL, 17. [Name] [varchar](50) NULL, 18. [Age] [int] NULL, 19. [Sex] [bit] NULL, 20. [ClassesId] [int] NULL, 21. [CreateUser] [int] NULL, 22. [CreateTime] [datetime] NULL, 23. [LastEditUser] [int] NULL, 24. [LastEditTime] [datetime] NULL 25. ) ON [PRIMARY] 26. 27. GO 28. 29. SET ANSI_PADDING OFF 30. GO
2. 班级表Classes
班级表主要用于保存班级相关信息,如下所示:
班级表创建语句,如下所示:
1. USE [SIMS] 2. GO 3. 4. /****** Object: Table [dbo].[Classes] Script Date: 2022/5/25 0:16:31 ******/ 5. SET ANSI_NULLS ON 6. GO 7. 8. SET QUOTED_IDENTIFIER ON 9. GO 10. 11. SET ANSI_PADDING ON 12. GO 13. 14. CREATE TABLE [dbo].[Classes]( 15. [Id] [int] IDENTITY(1,1) NOT NULL, 16. [Name] [varchar](50) NULL, 17. [Dept] [varchar](50) NULL, 18. [Grade] [varchar](50) NULL, 19. [HeadTeacher] [varchar](50) NULL, 20. [Monitor] [int] NULL, 21. [CreateUser] [int] NULL, 22. [CreateTime] [datetime] NULL, 23. [LastEditUser] [int] NULL, 24. [LastEditTime] [datetime] NULL 25. ) ON [PRIMARY] 26. 27. GO 28. 29. SET ANSI_PADDING OFF 30. GO
3. 课程表Courses
课程表主要保存课程信息,如下所示:
课程表创建语句,如下所示:
1. USE [SIMS] 2. GO 3. 4. /****** Object: Table [dbo].[Courses] Script Date: 2022/5/25 0:20:11 ******/ 5. SET ANSI_NULLS ON 6. GO 7. 8. SET QUOTED_IDENTIFIER ON 9. GO 10. 11. SET ANSI_PADDING ON 12. GO 13. 14. CREATE TABLE [dbo].[Courses]( 15. [Id] [int] IDENTITY(1,1) NOT NULL, 16. [Name] [varchar](50) NULL, 17. [Teacher] [varchar](50) NULL, 18. [CreateUser] [int] NULL, 19. [CreateTime] [datetime] NULL, 20. [LastEditUser] [int] NULL, 21. [LastEditTime] [datetime] NULL 22. ) ON [PRIMARY] 23. 24. GO 25. 26. SET ANSI_PADDING OFF 27. GO
4. 成绩表Scores
成绩表用于保存学生各科的成绩,如下所示:
成绩表创建语句,如下所示:
1. USE [SIMS] 2. GO 3. 4. /****** Object: Table [dbo].[Scores] Script Date: 2022/5/25 0:23:19 ******/ 5. SET ANSI_NULLS ON 6. GO 7. 8. SET QUOTED_IDENTIFIER ON 9. GO 10. 11. CREATE TABLE [dbo].[Scores]( 12. [Id] [int] IDENTITY(1,1) NOT NULL, 13. [StudentId] [int] NULL, 14. [CourseId] [int] NULL, 15. [Score] [float] NULL, 16. [CreateUser] [int] NULL, 17. [CreateTime] [datetime] NULL, 18. [LastEditUser] [int] NULL, 19. [LastEditTime] [datetime] NULL 20. ) ON [PRIMARY] 21. 22. GO
5. 其他数据表
其他数据表包括用户表【Users】,角色表【Roles】,用户角色对应关系表【UserRoles】,角色菜单对应关系表【RoleMenus】菜单表【Menus】 创建语句,如下所示:
1. USE [SIMS] 2. GO 3. 4. /****** Object: Table [dbo].[Users] Script Date: 2022/5/25 0:29:55 ******/ 5. SET ANSI_NULLS ON 6. GO 7. 8. SET QUOTED_IDENTIFIER ON 9. GO 10. 11. SET ANSI_PADDING ON 12. GO 13. 14. CREATE TABLE [dbo].[Users]( 15. [Id] [int] IDENTITY(1,1) NOT NULL, 16. [UserName] [varchar](50) NULL, 17. [Password] [varchar](50) NULL, 18. [NickName] [varchar](50) NULL 19. ) ON [PRIMARY] 20. 21. GO 22. 23. SET ANSI_PADDING OFF 24. GO 25. ------------------------------------------ 26. USE [SIMS] 27. GO 28. 29. /****** Object: Table [dbo].[Roles] Script Date: 2022/5/25 0:30:21 ******/ 30. SET ANSI_NULLS ON 31. GO 32. 33. SET QUOTED_IDENTIFIER ON 34. GO 35. 36. SET ANSI_PADDING ON 37. GO 38. 39. CREATE TABLE [dbo].[Roles]( 40. [id] [int] IDENTITY(1,1) NOT NULL, 41. [Name] [varchar](50) NULL, 42. [Description] [varchar](50) NULL 43. ) ON [PRIMARY] 44. 45. GO 46. 47. SET ANSI_PADDING OFF 48. GO 49. ------------------------------------------ 50. USE [SIMS] 51. GO 52. 53. /****** Object: Table [dbo].[Menus] Script Date: 2022/5/25 0:31:04 ******/ 54. SET ANSI_NULLS ON 55. GO 56. 57. SET QUOTED_IDENTIFIER ON 58. GO 59. 60. SET ANSI_PADDING ON 61. GO 62. 63. CREATE TABLE [dbo].[Menus]( 64. [id] [int] IDENTITY(1,1) NOT NULL, 65. [Name] [varchar](50) NULL, 66. [Description] [varchar](50) NULL, 67. [Url] [varchar](250) NULL, 68. [ParentId] [int] NULL, 69. [SortId] [int] NULL 70. ) ON [PRIMARY] 71. 72. GO 73. 74. SET ANSI_PADDING OFF 75. GO 76. 77. ------------------------------------------ 78. USE [SIMS] 79. GO 80. 81. /****** Object: Table [dbo].[UserRoles] Script Date: 2022/5/25 0:31:20 ******/ 82. SET ANSI_NULLS ON 83. GO 84. 85. SET QUOTED_IDENTIFIER ON 86. GO 87. 88. CREATE TABLE [dbo].[UserRoles]( 89. [id] [int] IDENTITY(1,1) NOT NULL, 90. [UserId] [int] NULL, 91. [RoleId] [int] NULL 92. ) ON [PRIMARY] 93. 94. GO 95. ------------------------------------------ 96. USE [SIMS] 97. GO 98. 99. /****** Object: Table [dbo].[RoleMenus] Script Date: 2022/5/25 0:31:35 ******/ 100. SET ANSI_NULLS ON 101. GO 102. 103. SET QUOTED_IDENTIFIER ON 104. GO 105. 106. CREATE TABLE [dbo].[RoleMenus]( 107. [id] [int] IDENTITY(1,1) NOT NULL, 108. [RoleId] [int] NULL, 109. [MenuId] [int] NULL 110. ) ON [PRIMARY] 111. 112. GO
数据库实体类
数据库实体类是数据库表与类的映射,通过操作实体类来达到操作数据库的目的,实体类需要与EntityFramework结合起来使用。如下所示:
1. 学生类StudentEntity
学生类与学生表对应,如下所示:
1. namespace SIMS.Entity 2. { 3. /// <summary> 4. /// 学生实体 5. /// </summary> 6. public class StudentEntity 7. { 8. /// <summary> 9. /// 唯一标识 10. /// </summary> 11. public int Id { get; set; } 12. 13. /// <summary> 14. /// 学号 15. /// </summary> 16. public string No { get; set; } 17. 18. /// <summary> 19. /// 学生名称 20. /// </summary> 21. public string Name { get; set; } 22. 23. /// <summary> 24. /// 年纪 25. /// </summary> 26. public int Age { get; set; } 27. 28. /// <summary> 29. /// 性别 30. /// </summary> 31. public Boolean Sex { get; set; } 32. 33. /// <summary> 34. /// 班级标识 35. /// </summary> 36. public int? ClassesId { get; set; } 37. 38. /// <summary> 39. /// 创建时间 40. /// </summary> 41. public DateTime? CreateTime { get; set; } 42. 43. /// <summary> 44. /// 当前登录的账号的ID 45. /// </summary> 46. public int? CreateUser { get; set; } 47. 48. /// <summary> 49. /// 最后编辑时间 50. /// </summary> 51. public DateTime? LastEditTime { get; set; } 52. 53. /// <summary> 54. /// 最后修改人 55. /// </summary> 56. public int? LastEditUser { get; set; } 57. } 58. }
2. 班级类ClassesEntity
班级类与班级表对应,如下所示:
1. namespace SIMS.Entity 2. { 3. /// <summary> 4. /// 班级实体 5. /// </summary> 6. public class ClassesEntity 7. { 8. /// <summary> 9. /// 唯一标识 10. /// </summary> 11. public int Id { get; set; } 12. 13. /// <summary> 14. /// 专业 15. /// </summary> 16. public string Dept { get; set; } 17. 18. /// <summary> 19. /// 年级 20. /// </summary> 21. public string Grade { get; set; } 22. 23. /// <summary> 24. /// 班级名称 25. /// </summary> 26. public string Name { get; set; } 27. 28. /// <summary> 29. /// 班主任老师名称 30. /// </summary> 31. public string HeadTeacher { get; set; } 32. 33. /// <summary> 34. /// 班长id,对应学生表的学生 35. /// </summary> 36. public int? Monitor { get; set; } 37. 38. /// <summary> 39. /// 创建时间 40. /// </summary> 41. public DateTime CreateTime { get; set; } 42. 43. /// <summary> 44. /// 当前登录的账号的ID 45. /// </summary> 46. public int CreateUser { get; set; } 47. 48. /// <summary> 49. /// 最后编辑时间 50. /// </summary> 51. public DateTime LastEditTime { get; set; } 52. 53. /// <summary> 54. /// 最后修改人 55. /// </summary> 56. public int LastEditUser { get; set; } 57. } 58. }