ASP.NET MVC+EF框架+EasyUI实现权限管理系列(2)-数据库访问层的设计Demo

简介: 原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(2)-数据库访问层的设计Demo   ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1)框架搭建   前言:这篇博客我们继续来实现我的权限系列,这个博客一段时间也没有写了,重点是我在想还写不写,最终...
原文: ASP.NET MVC+EF框架+EasyUI实现权限管理系列(2)-数据库访问层的设计Demo

   ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1)框架搭建

  前言:这篇博客我们继续来实现我的权限系列,这个博客一段时间也没有写了,重点是我在想还写不写,最终我决定还是写下去,因为我们是为了学习,当别人提出意见的时候,我们可以参考和采纳,但是我们不一定非要采纳,上几篇博客大家都说用CodeFirst来实现,是啊,现在基本很少有人用我的这种方法来实现了,都是用CodeFirst来实现,但是我写这篇博客的目的不是为了学多少东西,而是为了学一种编程的思想,所以我今天继续这个话题我们聊下去。

1.模型设计

  (1)今天我们先来初步的设计一下模型的搭建,也就是我们在edmx文件下面搭建出我们自己设计的实体对象,添加实体的步骤我就在这里不罗嗦了,大家看图就能够设计出来,如图所示:

     

  (2) 解释:UserInfo(用户表)实体表里面的UName的属性最大长度为32,可以为Null为true,其他默认,Pwd的属性最大长度为16,可以为Null为true,其他默认,

  (3) Role(角色)表里面的RoleName的属性最大长度为32,可以为Null为true,其他默认。

  (4) 注意:当我们添加实体的时候,选择添加实体集的时候后面会有一个“集”字,我们记得要删除它

  (5)当我们设计完这个简单的Demo之后,我们将使用模型的关系生成数据库,这个步骤我也不往出来写了,相信有一点基础的同学都知道该如何实现。

2.搭建架构-设计数据访问层

  (1)我们在数据库访问层(LYZJ.UserLimitMVC.DAL) 下面添加UserInfoRepository(用户仓储),RoleRepository(角色仓储),这些功能是为了实现对数据库的操作,也就是增删改查,注意了,这里会有一个问题,我们的用户和角色都会用到数据库的操作(增删改查),那么我们怎么办呢,想必这里大家已经清楚该怎么办了,当我们遇到公共的东西的时候我们最好能够抽象出来实现一个固定的功能的基类,然后我们只对其进行继承操作。

  (2) 我们的Demo设计的数据库访问层的架构如图所示:

        

3.对基类(BaseRepository(仓储))操作数据库(增删改查)的实现。

  (1)添加引用

       当我们对基类进行操作的时候,我们需要用到我们刚才建立的实体的DLL和使用Entity FrameWork操作数据库的DLL,下面我们在数据库访问层添加这两个引用,分别是:LYZJ.UserLimitMVC.Model,System.Data.Entity。

  (2)对基类(BaseRepository)操作数据库的实现方法,含有增删改查和分页查询,代码如下:

  1 using System.Data;
  2 
  3 using LYZJ.UserLimitMVC.Model;
  4 
  5 using System;
  6 
  7 using System.Collections.Generic;
  8 
  9 using System.Linq;
 10 
 11 using System.Text;
 12 
 13 using System.Threading.Tasks;
 14 
 15  
 16 
 17 namespace LYZJ.UserLimitMVC.DAL
 18 
 19 {
 20 
 21     /// <summary>
 22 
 23     /// 实现对数据库的操作(增删改查)的基类
 24 
 25     /// </summary>
 26 
 27     /// <typeparam name="T">定义泛型,约束其是一个类</typeparam>
 28 
 29     public class BaseRepository<T> where T : class
 30 
 31     {
 32 
 33         //创建EF框架的上下文
 34 
 35         private DataModelContainer db = new DataModelContainer();
 36 
 37  
 38 
 39         // 实现对数据库的添加功能,添加实现EF框架的引用
 40 
 41         public T AddEntity(T entity)
 42 
 43         {
 44 
 45             //EF4.0的写法   添加实体
 46 
 47             //db.CreateObjectSet<T>().AddObject(entity);
 48 
 49             //EF5.0的写法
 50 
 51             db.Entry<T>(entity).State = EntityState.Added;
 52 
 53  
 54 
 55             //下面的写法统一
 56 
 57             db.SaveChanges();
 58 
 59             return entity;
 60 
 61         }
 62 
 63  
 64 
 65         //实现对数据库的修改功能
 66 
 67         public bool UpdateEntity(T entity)
 68 
 69         {
 70 
 71             //EF4.0的写法
 72 
 73             //db.CreateObjectSet<T>().Addach(entity);
 74 
 75             //db.ObjectStateManager.ChangeObjectState(entity, EntityState.Modified);
 76 
 77             //EF5.0的写法
 78 
 79             db.Set<T>().Attach(entity);
 80 
 81             db.Entry<T>(entity).State = EntityState.Modified;
 82 
 83  
 84 
 85             return db.SaveChanges() > 0;
 86 
 87         }
 88 
 89  
 90 
 91         //实现对数据库的删除功能
 92 
 93         public bool DeleteEntity(T entity)
 94 
 95         {
 96 
 97             //EF4.0的写法
 98 
 99             //db.CreateObjectSet<T>().Addach(entity);
100 
101             //db.ObjectStateManager.ChangeObjectState(entity, EntityState.Deleted);
102 
103             //EF5.0的写法
104 
105             db.Set<T>().Attach(entity);
106 
107             db.Entry<T>(entity).State = EntityState.Deleted;
108 
109  
110 
111             return db.SaveChanges() > 0;
112 
113         }
114 
115  
116 
117         //实现对数据库的查询  --简单查询
118 
119         public IQueryable<T> LoadEntities(Func<T, bool> whereLambda)
120 
121         {
122 
123             //EF4.0的写法
124 
125             //return db.CreateObjectSet<T>().Where<T>(whereLambda).AsQueryable();
126 
127             //EF5.0的写法
128 
129             return db.Set<T>().Where<T>(whereLambda).AsQueryable();
130 
131         }
132 
133  
134 
135         /// <summary>
136 
137         /// 实现对数据的分页查询
138 
139         /// </summary>
140 
141         /// <typeparam name="S">按照某个类进行排序</typeparam>
142 
143         /// <param name="pageIndex">当前第几页</param>
144 
145         /// <param name="pageSize">一页显示多少条数据</param>
146 
147         /// <param name="total">总条数</param>
148 
149         /// <param name="whereLambda">取得排序的条件</param>
150 
151         /// <param name="isAsc">如何排序,根据倒叙还是升序</param>
152 
153         /// <param name="orderByLambda">根据那个字段进行排序</param>
154 
155         /// <returns></returns>
156 
157         public IQueryable<T> LoadPageEntities<S>(int pageIndex, int pageSize, out  int total, Func<T, bool> whereLambda,
158 
159             bool isAsc, Func<T, S> orderByLambda)
160 
161         {
162 
163             //EF4.0和上面的查询一样
164 
165             //EF5.0
166 
167             var temp = db.Set<T>().Where<T>(whereLambda);
168 
169             total = temp.Count(); //得到总的条数
170 
171             //排序,获取当前页的数据
172 
173             if (isAsc)
174 
175             {
176 
177                 temp = temp.OrderBy<T, S>(orderByLambda)
178 
179                      .Skip<T>(pageSize * (pageIndex - 1)) //越过多少条
180 
181                      .Take<T>(pageSize).AsQueryable(); //取出多少条
182 
183             }
184 
185             else
186 
187             {
188 
189                 temp = temp.OrderByDescending<T, S>(orderByLambda)
190 
191                     .Skip<T>(pageSize*(pageIndex - 1)) //越过多少条
192 
193                     .Take<T>(pageSize).AsQueryable(); //取出多少条
194 
195             }
196 
197             return temp.AsQueryable();
198 
199         }
200 
201     }
202 
203 }

4.继承实现用户和角色的操作数据库的方法

 (1)当我们写完操作数据库的基类的时候,这时候我们就要对用户和角色实现对数据库的操作,我在上面就说了,这时候我们可以使用继承基类来直接实现对数据库的操作。

 (2)用户仓储(UserInfoRepository继承基类的代码

 1 namespace LYZJ.UserLimitMVC.DAL
 2 
 3 {
 4     public class UserInfoRepository:BaseRepository<UserInfo>
 5 
 6     {
 7 
 8     }
 9 
10 }

 (3)角色仓储(RoleRepository)继承基类的代码

1 namespace LYZJ.UserLimitMVC.DAL
2 
3 {
4     public class RoleRepository : BaseRepository<Role>
5 
6     {
7 
8     }
9 }

5.图形总结流程-对此代码实现的图形总结

 (1)到这里,我们的这篇博客算是写完了,当然很多东西我们没有实现,而且也看不到效果,我现在会加快速度让大家看到效果,在最后我将画一张图来说明一下这个实现的效果,如图所示:

   

 (2)下篇博客我们开始讨论面向接口的编程。期待中,晚上回来继续完成。

  

  Kencery返回本系列开篇

  

目录
相关文章
|
9天前
|
数据可视化 网络协议 C#
C#/.NET/.NET Core优秀项目和框架2024年3月简报
公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架(每周至少会推荐两个优秀的项目和框架当然节假日除外),公众号推文中有项目和框架的介绍、功能特点、使用方式以及部分功能截图等(打不开或者打开GitHub很慢的同学可以优先查看公众号推文,文末一定会附带项目和框架源码地址)。注意:排名不分先后,都是十分优秀的开源项目和框架,每周定期更新分享(欢迎关注公众号:追逐时光者,第一时间获取每周精选分享资讯🔔)。
|
27天前
|
SQL 数据库连接 数据库
你不知道ADo.Net中操作数据库的步骤【超详细整理】
你不知道ADo.Net中操作数据库的步骤【超详细整理】
15 0
|
1月前
|
SQL 数据库 C#
C# .NET面试系列十一:数据库SQL查询(附建表语句)
#### 第1题 用一条 SQL 语句 查询出每门课都大于80 分的学生姓名 建表语句: ```sql create table tableA ( name varchar(10), kecheng varchar(10), fenshu int(11) ) DEFAULT CHARSET = 'utf8'; ``` 插入数据 ```sql insert into tableA values ('张三', '语文', 81); insert into tableA values ('张三', '数学', 75); insert into tableA values ('李四',
61 2
C# .NET面试系列十一:数据库SQL查询(附建表语句)
|
1月前
|
SQL 开发框架 JavaScript
在 Vue 中进行数据持久化时,有哪些常用的数据库框架?
在 Vue 中进行数据持久化时,有哪些常用的数据库框架?
45 3
|
2月前
|
前端开发 Java 程序员
从零基础手写Spring MVC框架,准备好进阶程序员了吗?
我们程序员大部分人都是野路子,不懂什么叫代码规范。写了一个月的代码,最后还得其他老司机花3天时间重构,相信大部分老司机都很头疼看新手的代码。
24 1
|
2月前
|
开发框架 JavaScript 前端开发
5个.NET开源且强大的快速开发框架(帮助你提高生产效率)
5个.NET开源且强大的快速开发框架(帮助你提高生产效率)
|
15天前
|
前端开发 安全 Java
使用Java Web框架:Spring MVC的全面指南
【4月更文挑战第3天】Spring MVC是Spring框架的一部分,用于构建高效、模块化的Web应用。它基于MVC模式,支持多种视图技术。核心概念包括DispatcherServlet(前端控制器)、HandlerMapping(请求映射)、Controller(处理请求)、ViewResolver(视图解析)和ModelAndView(模型和视图容器)。开发流程涉及配置DispatcherServlet、定义Controller、创建View、处理数据、绑定模型和异常处理。
使用Java Web框架:Spring MVC的全面指南
|
21天前
|
前端开发 JavaScript Java
MVC框架:SpringMVC(三)
MVC框架:SpringMVC
30 0
|
21天前
|
JSON 前端开发 JavaScript
MVC框架:SpringMVC(二)
MVC框架:SpringMVC
35 0
|
21天前
|
前端开发 Java 应用服务中间件
MVC框架:SpringMVC(一)
MVC框架:SpringMVC
58 0