最近通過WPF開發項目,為了對WPF知識點進行總結,所以利用業餘時間,開發一個學生信息管理系統【Student Information Management System】。上一篇文章進行了框架搭建和模塊劃分,本文在前一篇基礎之上,繼續深入開發學生信息管理系統的資料庫和WebApi介面搭建相關內容,... ...
最近通過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 GOView Code
資料庫實體類
資料庫實體類是資料庫表與類的映射,通過操作實體類來達到操作資料庫的目的,實體類需要與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