3. 课程类CourseEntity
课程类与课程表对应,如下所示:
1. namespace SIMS.Entity 2. { 3. /// <summary> 4. /// 课程实体 5. /// </summary> 6. public class CourseEntity 7. { 8. /// <summary> 9. /// 唯一标识 10. /// </summary> 11. public int Id { get; set; } 12. 13. /// <summary> 14. /// 课程名称 15. /// </summary> 16. public string Name { get; set; } 17. 18. /// <summary> 19. /// 授课老师 20. /// </summary> 21. public string Teacher { get; set; } 22. 23. /// <summary> 24. /// 创建时间 25. /// </summary> 26. public DateTime CreateTime { get; set; } 27. 28. /// <summary> 29. /// 当前登录的账号的ID 30. /// </summary> 31. public int CreateUser { get; set; } 32. 33. /// <summary> 34. /// 最后编辑时间 35. /// </summary> 36. public DateTime LastEditTime { get; set; } 37. 38. /// <summary> 39. /// 最后修改人 40. /// </summary> 41. public int LastEditUser { get; set; } 42. } 43. }
4. 成绩类ScoreEntity
成绩类与成绩表对应,如下所示:
1. namespace SIMS.Entity 2. { 3. /// <summary> 4. /// 成绩实体 5. /// </summary> 6. public class ScoreEntity 7. { 8. /// <summary> 9. /// 唯一标识 10. /// </summary> 11. public int Id { get; set; } 12. 13. /// <summary> 14. ///学生id 15. /// </summary> 16. public int StudentId { get; set; } 17. 18. /// <summary> 19. /// 课程id 20. /// </summary> 21. public int CourseId { get; set; } 22. 23. /// <summary> 24. /// 成绩 25. /// </summary> 26. public double Score { get; set; } 27. 28. /// <summary> 29. /// 创建时间 30. /// </summary> 31. public DateTime CreateTime { get; set; } 32. 33. /// <summary> 34. /// 当前登录的账号的ID 35. /// </summary> 36. public int CreateUser { get; set; } 37. 38. /// <summary> 39. /// 最后编辑时间 40. /// </summary> 41. public DateTime LastEditTime { get; set; } 42. 43. /// <summary> 44. /// 最后修改人 45. /// </summary> 46. public int LastEditUser { get; set; } 47. } 48. }
5. 其他实体类
除了以上四个主要的实体类,还有其他实体类,如下所示:
菜单实体MenuEntity,如下所示:
1. namespace SIMS.Entity 2. { 3. /// <summary> 4. /// 菜单管理 5. /// </summary> 6. public class MenuEntity 7. { 8. /// <summary> 9. /// 唯一标识 10. /// </summary> 11. public int Id { get; set; } 12. 13. /// <summary> 14. /// 菜单名称 15. /// </summary> 16. public string Name { get; set; } 17. 18. /// <summary> 19. /// 菜单描述 20. /// </summary> 21. public string Description { get; set; } 22. 23. /// <summary> 24. /// 菜单路径 25. /// </summary> 26. public string Url { get; set; } 27. 28. /// <summary> 29. /// 父ID 30. /// </summary> 31. public int? ParentId { get; set; } 32. 33. /// <summary> 34. /// 排序 35. /// </summary> 36. public int? SortId { get; set; } 37. } 38. }
用户实体类UserEntity,如下所示:
1. namespace SIMS.Entity 2. { 3. public class UserEntity 4. { 5. /// <summary> 6. /// 用户唯一标识 7. /// </summary> 8. public int Id { get; set; } 9. 10. /// <summary> 11. /// 登录账号 12. /// </summary> 13. public string UserName { get; set; } 14. 15. /// <summary> 16. /// 密码 17. /// </summary> 18. public string Password { get; set; } 19. 20. /// <summary> 21. /// 显示名称 22. /// </summary> 23. public string NickName { get; set; } 24. } 25. }
角色实体类RoleEntity,如下所示:
1. namespace SIMS.Entity 2. { 3. /// <summary> 4. /// 角色 5. /// </summary> 6. public class RoleEntity 7. { 8. /// <summary> 9. /// 唯一标识 10. /// </summary> 11. public int Id { get; set; } 12. 13. /// <summary> 14. /// 角色名称 15. /// </summary> 16. public string Name { get; set; } 17. 18. /// <summary> 19. /// 角色描述 20. /// </summary> 21. public string Description { get; set; } 22. } 23. }
用户角色关系实体类UserRoleEntityr,如下所示:
1. namespace SIMS.Entity 2. { 3. /// <summary> 4. /// 用户-角色模型 5. /// </summary> 6. public class UserRoleEntity 7. { 8. /// <summary> 9. /// 唯一标识 10. /// </summary> 11. public int Id { get; set; } 12. 13. /// <summary> 14. /// 用户ID 15. /// </summary> 16. public int UserId { get; set; } 17. 18. /// <summary> 19. /// 角色ID 20. /// </summary> 21. public int RoleId { get; set; } 22. } 23. }
角色菜单关系实体RoleMenuEntity,如下所示:
1. namespace SIMS.Entity 2. { 3. /// <summary> 4. /// 角色-菜单关联 5. /// </summary> 6. public class RoleMenuEntity 7. { 8. /// <summary> 9. /// 唯一标识 10. /// </summary> 11. public int Id { get; set; } 12. 13. /// <summary> 14. /// 菜单IP 15. /// </summary> 16. public int MenuId { get; set; } 17. 18. /// <summary> 19. /// 角色ID 20. /// </summary> 21. public int RoleId { get; set; } 22. } 23. }
一共九个实体类,对应数据库中的九个表。
WebApi数据接口
在本示例中,客户端和服务端交互通过webapi接口进行,避免直接操作数据库。具体步骤如下所示:
1. EntityFramework框架
EntityFramework是.Net领域通用的ORM框架,有CodeFirst和DBFirst两种方式,本文采用DBFirst方式,即先设计数据库表结构,再创建实体和映射。如果要使用EntityFramework框架,首先进行安装,可通过NuGet包管理器进行安装,如下所示:
创建DataContext数据操作类,继承自DbContext,并重写OnModelCreating方法,将数据表和实体类建立联系,实现映射,如下所示:
1. namespace SIMS.WebApi.Data 2. { 3. public class DataContext:DbContext 4. { 5. public DbSet<UserEntity> Users { get; set; } 6. 7. public DbSet<MenuEntity> Menus { get; set; } 8. 9. public DbSet<RoleEntity> Roles { get; set; } 10. 11. public DbSet<UserRoleEntity> UserRoles { get; set; } 12. 13. public DbSet<RoleMenuEntity> RoleMenus { get; set; } 14. 15. /// <summary> 16. /// 学生 17. /// </summary> 18. public DbSet<StudentEntity> Students { get; set; } 19. 20. /// <summary> 21. /// 班级 22. /// </summary> 23. public DbSet<ClassesEntity> Classes { get; set; } 24. 25. /// <summary> 26. /// 课程 27. /// </summary> 28. public DbSet<CourseEntity> Courses { get; set; } 29. 30. /// <summary> 31. /// 成绩 32. /// </summary> 33. public DbSet<ScoreEntity> Scores { get; set; } 34. 35. public DataContext(DbContextOptions options) : base(options) 36. { 37. 38. } 39. 40. protected override void OnModelCreating(ModelBuilder modelBuilder) 41. { 42. base.OnModelCreating(modelBuilder); 43. modelBuilder.Entity<UserEntity>().ToTable("Users"); 44. modelBuilder.Entity<MenuEntity>().ToTable("Menus"); 45. modelBuilder.Entity<StudentEntity>().ToTable("Students"); 46. modelBuilder.Entity<RoleEntity>().ToTable("Roles"); 47. modelBuilder.Entity<UserRoleEntity>().ToTable("UserRoles"); 48. modelBuilder.Entity<RoleMenuEntity>().ToTable("RoleMenus"); 49. } 50. } 51. }
2. 创建服务
在本示例中,为了封装数据库的底层操作,提取了四个服务接口和类,如下所示:
学生服务接口IStudentAppService,是对学生表操作的封装,如下所示:
1. namespace SIMS.WebApi.Services.Student 2. { 3. public interface IStudentAppService 4. { 5. /// <summary> 6. /// 查询学生列表 7. /// </summary> 8. /// <param name="name"></param> 9. /// <returns></returns> 10. public PagedRequest<StudentEntity> GetStudents(string no,string name, int pageNum, int pageSize); 11. 12. /// <summary> 13. /// 查询某一班级的学生列表 14. /// </summary> 15. /// <param name="classId"></param> 16. /// <returns></returns> 17. public PagedRequest<StudentEntity> GetStudentsByClasses(int classId); 18. 19. /// <summary> 20. /// 通过id查询学生信息 21. /// </summary> 22. /// <param name="id"></param> 23. /// <returns></returns> 24. public StudentEntity GetSudent(int id); 25. 26. /// <summary> 27. /// 新增学生 28. /// </summary> 29. /// <param name="student"></param> 30. /// <returns></returns> 31. public int AddStudent(StudentEntity student); 32. 33. /// <summary> 34. /// 修改学生 35. /// </summary> 36. /// <param name="student"></param> 37. /// <returns></returns> 38. public int UpdateStudent(StudentEntity student); 39. 40. /// <summary> 41. /// 删除学生 42. /// </summary> 43. /// <param name="id"></param> 44. public int DeleteStudent(int id); 45. } 46. }
学生服务实现类StudentAppService
学生服务实现类是对接口的实现,如下所示:
1. namespace SIMS.WebApi.Services.Student 2. { 3. public class StudentAppService : IStudentAppService 4. { 5. private DataContext dataContext; 6. 7. public StudentAppService(DataContext dataContext) { 8. this.dataContext = dataContext; 9. } 10. 11. /// <summary> 12. /// 新增学生 13. /// </summary> 14. /// <param name="student"></param> 15. /// <returns></returns> 16. public int AddStudent(StudentEntity student) 17. { 18. var entry = dataContext.Students.Add(student); 19. dataContext.SaveChanges(); 20. return 0; 21. } 22. 23. /// <summary> 24. /// 删除学生 25. /// </summary> 26. /// <param name="id"></param> 27. public int DeleteStudent(int id) 28. { 29. var entity = dataContext.Students.FirstOrDefault(x => x.Id == id); 30. if (entity != null) 31. { 32. dataContext.Students.Remove(entity); 33. dataContext.SaveChanges(); 34. } 35. return 0; 36. } 37. 38. /// <summary> 39. /// 查询学生列表 40. /// </summary> 41. /// <param name="name"></param> 42. /// <param name="pageNum">页数</param> 43. /// <param name="pageSize">每页大小</param> 44. /// <returns></returns> 45. public PagedRequest<StudentEntity> GetStudents(string no,string name,int pageNum,int pageSize) 46. { 47. IQueryable<StudentEntity> students = null; 48. if (!string.IsNullOrEmpty(name) && string.IsNullOrEmpty(no)) 49. { 50. students = dataContext.Students.Where(r => r.Name.Contains(name) && r.No.Contains(no)).OrderBy(r => r.Id); 51. } 52. else if (!string.IsNullOrEmpty(name)) 53. { 54. students = dataContext.Students.Where(r => r.Name.Contains(name)).OrderBy(r => r.Id); 55. } 56. else if (!string.IsNullOrEmpty(name)) { 57. students = dataContext.Students.Where(r => r.No.Contains(no)).OrderBy(r => r.Id); 58. } 59. else 60. { 61. students = dataContext.Students.Where(r => true).OrderBy(r => r.Id); 62. } 63. int count = students.Count(); 64. List<StudentEntity> items; 65. if (pageSize > 0) 66. { 67. items = students.Skip((pageNum - 1) * pageSize).Take(pageSize).ToList(); 68. } 69. else { 70. items = students.ToList(); 71. } 72. return new PagedRequest<StudentEntity>() 73. { 74. count = count, 75. items = items 76. }; 77. } 78. 79. /// <summary> 80. /// 查询某一班级的学生列表 81. /// </summary> 82. /// <param name="classId"></param> 83. /// <returns></returns> 84. public PagedRequest<StudentEntity> GetStudentsByClasses(int classId) 85. { 86. IQueryable<StudentEntity> students = dataContext.Students.Where(r => r.ClassesId==classId).OrderBy(r => r.Id); 87. int count = students.Count(); 88. var items = students.ToList(); 89. return new PagedRequest<StudentEntity>() 90. { 91. count = count, 92. items = items 93. }; 94. } 95. 96. /// <summary> 97. /// 通过id查询学生信息 98. /// </summary> 99. /// <param name="id"></param> 100. /// <returns></returns> 101. public StudentEntity GetSudent(int id) 102. { 103. var entity = dataContext.Students.FirstOrDefault(r => r.Id == id); 104. return entity; 105. } 106. 107. /// <summary> 108. /// 修改学生 109. /// </summary> 110. /// <param name="student"></param> 111. /// <returns></returns> 112. public int UpdateStudent(StudentEntity student) 113. { 114. dataContext.Students.Update(student); 115. dataContext.SaveChanges(); 116. return 0; 117. } 118. } 119. }
班级服务接口IClassesAppService
班级服务接口是对班级表操作的封装,如下所示:
1. namespace SIMS.WebApi.Services.Classes 2. { 3. public interface IClassesAppService 4. { 5. public PagedRequest<ClassesEntity> GetClassess(string dept, string grade, int pageNum, int pageSize); 6. 7. /// <summary> 8. /// 通过id查询班级信息 9. /// </summary> 10. /// <param name="id"></param> 11. /// <returns></returns> 12. public ClassesEntity GetClasses(int id); 13. 14. /// <summary> 15. /// 新增班级 16. /// </summary> 17. /// <param name="classes"></param> 18. /// <returns></returns> 19. public int AddClasses(ClassesEntity classes); 20. 21. /// <summary> 22. /// 修改班级 23. /// </summary> 24. /// <param name="classes"></param> 25. /// <returns></returns> 26. public int UpdateClasses(ClassesEntity classes); 27. 28. /// <summary> 29. /// 删除班级 30. /// </summary> 31. /// <param name="id"></param> 32. public int DeleteClasses(int id); 33. } 34. }
班级服务实现类ClassesAppService,如下所示:
1. namespace SIMS.WebApi.Services.Classes 2. { 3. public class ClassesAppService : IClassesAppService 4. { 5. private DataContext dataContext; 6. 7. public ClassesAppService(DataContext dataContext) 8. { 9. this.dataContext = dataContext; 10. } 11. 12. /// <summary> 13. /// 新增班级 14. /// </summary> 15. /// <param name="classes"></param> 16. /// <returns></returns> 17. public int AddClasses(ClassesEntity classes) 18. { 19. var entry = dataContext.Classes.Add(classes); 20. dataContext.SaveChanges(); 21. return 0; 22. } 23. 24. /// <summary> 25. /// 删除班级 26. /// </summary> 27. /// <param name="id"></param> 28. public int DeleteClasses(int id) 29. { 30. var entity = dataContext.Classes.FirstOrDefault(x => x.Id == id); 31. if (entity != null) 32. { 33. dataContext.Classes.Remove(entity); 34. dataContext.SaveChanges(); 35. } 36. return 0; 37. } 38. 39. /// <summary> 40. /// 查询班级 41. /// </summary> 42. /// <param name="id"></param> 43. /// <returns></returns> 44. public ClassesEntity GetClasses(int id) 45. { 46. var entity = dataContext.Classes.FirstOrDefault(r => r.Id == id); 47. return entity; 48. } 49. 50. public PagedRequest<ClassesEntity> GetClassess(string dept, string grade, int pageNum, int pageSize) 51. { 52. IQueryable<ClassesEntity> classes = null; 53. if (!string.IsNullOrEmpty(dept) && string.IsNullOrEmpty(grade)) 54. { 55. classes = dataContext.Classes.Where(r => r.Dept.Contains(dept) && r.Grade.Contains(grade)).OrderBy(r => r.Id); 56. } 57. else if (!string.IsNullOrEmpty(dept)) 58. { 59. classes = dataContext.Classes.Where(r => r.Dept.Contains(dept)).OrderBy(r => r.Id); 60. } 61. else if (!string.IsNullOrEmpty(grade)) 62. { 63. classes = dataContext.Classes.Where(r => r.Grade.Contains(grade)).OrderBy(r => r.Id); 64. } 65. else 66. { 67. classes = dataContext.Classes.Where(r => true).OrderBy(r => r.Id); 68. } 69. int count = classes.Count(); 70. List<ClassesEntity> items=new List<ClassesEntity>(); 71. if (pageSize < 1) 72. { 73. items = classes.ToList(); 74. } 75. else { 76. items = classes.Skip((pageNum - 1) * pageSize).Take(pageSize).ToList(); 77. } 78. 79. return new PagedRequest<ClassesEntity>() 80. { 81. count = count, 82. items = items 83. }; 84. } 85. 86. /// <summary> 87. /// 修改班级 88. /// </summary> 89. /// <param name="classes"></param> 90. /// <returns></returns> 91. public int UpdateClasses(ClassesEntity classes) 92. { 93. dataContext.Classes.Update(classes); 94. dataContext.SaveChanges(); 95. return 0; 96. } 97. } 98. }
其他服务接口和类尚不完善,暂时先不贴代码。