原文: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)操作数据库的实现方法,含有增删改查和分页查询,代码如下:

 using System.Data;

 using LYZJ.UserLimitMVC.Model;

 using System;

 using System.Collections.Generic;

 using System.Linq;

 using System.Text;

 using System.Threading.Tasks;

 namespace LYZJ.UserLimitMVC.DAL

 {

     /// <summary>

     /// 实现对数据库的操作(增删改查)的基类

     /// </summary>

     /// <typeparam name="T">定义泛型,约束其是一个类</typeparam>

     public class BaseRepository<T> where T : class

     {

         //创建EF框架的上下文

         private DataModelContainer db = new DataModelContainer();

         // 实现对数据库的添加功能,添加实现EF框架的引用

         public T AddEntity(T entity)

         {

             //EF4.0的写法   添加实体

             //db.CreateObjectSet<T>().AddObject(entity);

             //EF5.0的写法

             db.Entry<T>(entity).State = EntityState.Added;

             //下面的写法统一

             db.SaveChanges();

             return entity;

         }

         //实现对数据库的修改功能

         public bool UpdateEntity(T entity)

         {

             //EF4.0的写法

             //db.CreateObjectSet<T>().Addach(entity);

             //db.ObjectStateManager.ChangeObjectState(entity, EntityState.Modified);

             //EF5.0的写法

             db.Set<T>().Attach(entity);

             db.Entry<T>(entity).State = EntityState.Modified;

             return db.SaveChanges() > ;

         }

         //实现对数据库的删除功能

         public bool DeleteEntity(T entity)

         {

             //EF4.0的写法

             //db.CreateObjectSet<T>().Addach(entity);

             //db.ObjectStateManager.ChangeObjectState(entity, EntityState.Deleted);

             //EF5.0的写法

             db.Set<T>().Attach(entity);

             db.Entry<T>(entity).State = EntityState.Deleted;

             return db.SaveChanges() > ;

         }

         //实现对数据库的查询  --简单查询

         public IQueryable<T> LoadEntities(Func<T, bool> whereLambda)

         {

             //EF4.0的写法

             //return db.CreateObjectSet<T>().Where<T>(whereLambda).AsQueryable();

             //EF5.0的写法

             return db.Set<T>().Where<T>(whereLambda).AsQueryable();

         }

         /// <summary>

         /// 实现对数据的分页查询

         /// </summary>

         /// <typeparam name="S">按照某个类进行排序</typeparam>

         /// <param name="pageIndex">当前第几页</param>

         /// <param name="pageSize">一页显示多少条数据</param>

         /// <param name="total">总条数</param>

         /// <param name="whereLambda">取得排序的条件</param>

         /// <param name="isAsc">如何排序,根据倒叙还是升序</param>

         /// <param name="orderByLambda">根据那个字段进行排序</param>

         /// <returns></returns>

         public IQueryable<T> LoadPageEntities<S>(int pageIndex, int pageSize, out  int total, Func<T, bool> whereLambda,

             bool isAsc, Func<T, S> orderByLambda)

         {

             //EF4.0和上面的查询一样

             //EF5.0

             var temp = db.Set<T>().Where<T>(whereLambda);

             total = temp.Count(); //得到总的条数

             //排序,获取当前页的数据

             if (isAsc)

             {

                 temp = temp.OrderBy<T, S>(orderByLambda)

                      .Skip<T>(pageSize * (pageIndex - )) //越过多少条

                      .Take<T>(pageSize).AsQueryable(); //取出多少条

             }

             else

             {

                 temp = temp.OrderByDescending<T, S>(orderByLambda)

                     .Skip<T>(pageSize*(pageIndex - )) //越过多少条

                     .Take<T>(pageSize).AsQueryable(); //取出多少条

             }

             return temp.AsQueryable();

         }

     }

 }

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

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

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

 namespace LYZJ.UserLimitMVC.DAL

 {
public class UserInfoRepository:BaseRepository<UserInfo> { } }

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

 namespace LYZJ.UserLimitMVC.DAL

 {
public class RoleRepository : BaseRepository<Role> { }
}

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

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

  

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

  

  Kencery返回本系列开篇

  

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

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

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(4)-业务逻辑层的封装 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2) ...

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

    http://www.cnblogs.com/hanyinglong/archive/2013/03/22/2976478.html ASP.NET MVC+EF框架+EasyUI实现权限管理系列之开 ...

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

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列之开篇 前言:博客又有一段时间没有更新了,心里感觉这段时间空空的,好像什么都没有学下,所以就想写博客,所以就有了这个系列,这里当然也 ...

  4. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(21)-用户角色权限基本的实现说明

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(21)-用户角色权限基本的实现说明     ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框 ...

  5. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(20)-多条件模糊查询和回收站还原的实现

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(20)-多条件模糊查询和回收站还原的实现 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架 ...

  6. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(19)-用户信息的修改和浏览

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(19)-用户信息的修改和浏览  ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    ...

  7. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(18)-过滤器的使用和批量删除数据(伪删除和直接删除)

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(18)-过滤器的使用和批量删除数据(伪删除和直接删除) ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   ...

  8. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(17)-注册用户功能的细节处理(各种验证)

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(17)-注册用户功能的细节处理(各种验证) ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框 ...

  9. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(16)-类库架构扩展以及DLL文件生成修改和用户的简单添加

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(16)-类库架构扩展以及DLL文件生成修改和用户的简单添加 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) ...

随机推荐

  1. uboot的relocation原理具体分析

    近期在一直在做uboot的移植工作,uboot中有非常多值得学习的东西.之前总结过uboot的启动流程,但uboot一个非常核心的功能没有细致研究.就是uboot的relocation功能. 这几天研 ...

  2. schedule vs scheduleAtFixedRate

    最好的方法是在两者之间区分 timer灵感时间设定过去时间T,scheduleAtFixedRate将从T现在所有的任务中运行,schedule而该任务将只运行从现在开始计时. public clas ...

  3. MyBatis系列教程(六)-- 与Spring综合(Integrate with Spring)

    其它工具或技术需要使用: 项目管理工具 : Maven 前台WEB图库:JSP 其他框架:Spring, Spring MVC 数据库 : Derby Maven的Web项目 Maven Depend ...

  4. Redis源代码分析(23)--- CRC循环冗余算法RAND随机数的算法

    他今天就开始学习Redis源代码的一些工具来实现,在任何一种语言工具.算法实现的原理应该是相同的,一些比較经典的算法.比方说我今天看的Crc循环冗余校验算法和rand随机数产生算法. CRC算法全称循 ...

  5. Hello ASP.NET5

    2015年11月30日, ASP.NET 5 RC1 已经发布,本文尝试了一下ASP.NET5项目的创见一发布到IIS.开发环境,win10 64位,visual studio2015(已更新upda ...

  6. 开源Math.NET基础数学类库使用(13)C#实现其他随机数生成器

    原文:[原创]开源Math.NET基础数学类库使用(13)C#实现其他随机数生成器                本博客所有文章分类的总目录:http://www.cnblogs.com/asxiny ...

  7. 开源Math.NET基础数学类库使用(12)C#随机数扩展方法

    原文:[原创]开源Math.NET基础数学类库使用(12)C#随机数扩展方法                本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p ...

  8. ARM装配说明MCR/MRC学习

    MCR指令ARM数据寄存器传送到协处理器寄存器.假设协处理器不能成功运行操作.会产生未定义指令中止. 语法教学格式: MCR{<cond>} p15, 0, <Rd>, < ...

  9. 2013成都邀请赛J称号||HDU4725 The Shortest Path in Nya Graph(spfa+slf最短的优化)

    职务地址:HDU 4725 这题卡了好长时间了,建图倒是会建,可是不会最短路的算法优化,本以为都须要堆去优化的,打算学了堆之后再来优化.可是昨晚CF的一道题..(那题也是不优化过不了..)然后我就知道 ...

  10. Java经典23结构模型的设计模式(三)------附加代理模式、适配器型号、Facade模式的差异

    本文介绍了7样的结构模型中的其余2种:轻量级.代理模式. 一.享元模式FlyWeight 享元模式比較简单且重要,在非常多场合都被用到.仅仅只是封装起来了用户看不到.其概念:运用共享内存技术最大限度的 ...