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文件下面搭建出我们自己设计的实体对象,添加实体的步骤我就在这里不罗嗦了,大家看图就能够设计出来,如图所示:

    

  (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返回本系列开篇

  

时间: 2024-12-23 09:20:33

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

ASP.NET MVC+EF框架+EasyUI实现权限管理系列(4)-业务逻辑层的封装

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(4)-业务逻辑层的封装 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程 前言:前面几篇博客我们基本已经介绍完了搭建整个项目和数据库访问层以及一些业务逻辑层的实现,当然了,我们的数据库访问层这样还是可以在进行封装的,但是我到这里就行了吧,项目也不大,不需要那么麻烦的,那么我们今天开始介绍我们需要介绍的内容,那就是我

ASP.NET MVC+EF框架+EasyUI实现权限管理系列

http://www.cnblogs.com/hanyinglong/archive/2013/03/22/2976478.html ASP.NET MVC+EF框架+EasyUI实现权限管理系列之开篇 前言:博客又有一段时间没有更新了,心里感觉这段时间空空的,好像什么都没有学下,所以就想写博客,所以就有了这个系列,这里当然也要感谢大家了,因这个 项目我已经上传了,得到了很多网友的评价,也有好多人发邮件给我说这个框架容易出现问题,不能访问,这也是支持我写这个系列的动力,我将这个项目写成一个 系列

ASP.NET MVC+EF框架+EasyUI实现权限管理系列之开篇

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列之开篇 前言:博客又有一段时间没有更新了,心里感觉这段时间空空的,好像什么都没有学下,所以就想写博客,所以就有了这个系列,这里当然也要感谢大家了,因这个项目我已经上传了,得到了很多网友的评价,也有好多人发邮件给我说这个框架容易出现问题,不能访问,这也是支持我写这个系列的动力,我将这个项目写成一个系列,可能要很长时间吧,但是我肯定会一直坚持,如果我哪里写的不好欢迎大家指出我们共同学习,而且我理解的也不是很透彻,所以我想在写这样一遍

ASP.NET MVC+EF框架+EasyUI实现权限管理系列(5)-前台JqueryEasyUI前台实现

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(5)-前台JqueryEasyUI前台实现 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装 前言:今天经理买了一个诺基亚的Windows Phone 8系统,特感兴趣,所以在哪里看了很长时间,这篇文章就写的有点迟, 从这个Demo开始到现在我已经写了4篇博客了,终于可以看到页面的东

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

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(1)-框架搭建 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) 前言:这篇博客开始我们便一步一步的来实现这个权限系统的初步设计-框架搭建,首先我要说的是我们需要开发工具Visual Studio 2012或者10也行,其次是我们要有SQL Server数据库,如果是Visual Studio 2010的话,你还要安装MVC4的开发文件,这个是吗?我不记得了,谁可以回答我一下的,我一直用2012,都是集成

ASP.NET MVC+EF框架+EasyUI实现权限管理系列(6)- EF上下文实例管理

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(6)- EF上下文实例管理 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装  (5):前台Jquery easyUI实现 前言:通过前面的五篇博客我们已经对权限系统的后台架构进行了详细的说明,那么我再前面的博客中也说到了我们的后台架构还会再改的,我准备这段时间我们继续完善我们的后台

ASP.NET MVC+EF框架+EasyUI实现权限管理系列(7)-DBSession的封装

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(7)-DBSession的封装 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装  (5):前台Jquery easyUI实现   (6):EF上下文实例管理 前言:上篇博客中我们重新对EF框架实现上下文进行了重新的操作,而且我们也建立了DbSession,使用CallContext

ASP.NET MVC+EF框架+EasyUI实现权限管理系列(9)-TT模板的学习

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(9)-TT模板的学习 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装  (5):前台Jquery easyUI实现   (6):EF上下文实例管理   (7):DBSession的封装   (8):DBSession线程内唯一 前言:前面我们基本已经完成了一个Demo,我们在后面的

ASP.NET MVC+EF框架+EasyUI实现权限管理系列(3)-面向接口的编程

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(3)-面向接口的编程 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)  (1)框架搭建    (2):数据库访问层的设计Demo 前言:这篇博客在数据访问层的基础上面我们继续学习对这个Demo的开发,希望大家都好好理解一下这个Demo的架构,到最后我实现权限的时候我就简单的说一下搭建过程就OK了,因为这个Demo的思想就是按照权限的设计方式去设计的,下面我们开始介绍面向接口的编程思想,如果感觉好的话可以