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

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

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

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

1.模型设计

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

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

  (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设计的数据库访问层的架构如图所示:

        ASP.NET MVC+EF框架+EasyUI实现权限管理系列(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)到这里,我们的这篇博客算是写完了,当然很多东西我们没有实现,而且也看不到效果,我现在会加快速度让大家看到效果,在最后我将画一张图来说明一下这个实现的效果,如图所示:

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

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

  

  Kencery返回本系列开篇

  

你可能感兴趣的:(asp.net)