原文: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. NTP方式保证以时间戳同步可靠性

    数据库同步的方式有设置标志位同步方式.以时间戳同步的方式,对于一对一的同步这两种方式都满足,可是对于一对多的同步,则仅仅能选择时间戳的同步方式了.可是已时间戳同步的方式的一个问题是怎样可靠的保证数据能 ...

  2. HDU 1069 Monkey and Banana(DP 长方体堆放问题)

    Monkey and Banana Problem Description A group of researchers are designing an experiment to test the ...

  3. Vbox创建COM对象失败

    近期在使用vbox时出现下面错误:创建COM对象失败,应用程序将被中断 在CMD里面输入下面命令: C:\Users\Administrator>d: D:\>cd D:\Program ...

  4. 杭电1171 Big Event in HDU(母函数+多重背包解法)

    Big Event in HDU Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  5. Codeforces 474 E. Pillars

    水太...... E. Pillars time limit per test 1 second memory limit per test 256 megabytes input standard ...

  6. 从零开始做UI-静电的sketch设计教室 视频教程

    全套31集目录 01-初识Sketch  http://www.ui.cn/detail/52223.html02-sketch的下载与安装  http://www.ui.cn/detail/5222 ...

  7. Encountered a section with no Package: header

    刚才打开ubuntu,我的版本号是11.04.正想打开新立得软件工具包更新软件的时候,出现了例如以下错误: E:Encountered a section with no Package: heade ...

  8. 【POJ】The Suspects(裸并查集)

    并查集的模板题,为了避免麻烦,合并的时候根节点大的合并到小的结点. #include<cstdio> #include<algorithm> using namespace s ...

  9. hadoop出现namenode running as process 18472. Stop it first.

    hadoop出现namenode running as process 18472. Stop it first.等等,类别似几个的出现. namenode running as process 32 ...

  10. POJ 2828 Buy Tickets(排队问题,线段树应用)

    POJ 2828 Buy Tickets(排队问题,线段树应用) ACM 题目地址:POJ 2828 Buy Tickets 题意:  排队买票时候插队.  给出一些数对,分别代表某个人的想要插入的位 ...