ASP.NET MVC+EF框架+EasyUI实现权限管理系列(8)-DbSession线程内唯一
ASP.NET MVC+EF框架+EasyUI实现权限管系列
(开篇) (1):框架搭建 (2):数据库访问层的设计Demo (3):面向接口编程 (4 ):业务逻辑层的封装
(5):前台Jquery easyUI实现 (6):EF上下文实例管理 (7):DBSession的封装
前言:通过上篇博客我们完成了对DbSession的代码编写,DbSession就相当于数据库访问层的入口,只要我们要操作数据库我们就能够从这里进入到数据库,而且能取到所有的实体的对象,这些知识点我在上篇博客基本都已经说了,博友们可以去看看,现在系列已经写到8了,这期间谢谢广大博主的支持和回复,你们的评论将是我学习的动力,希望你们能对我的博客进行评论。这篇博客我们继续来说我们的底层的实现,可能大部分博友们也有点心急,什么时候能见到页面呢,现在快了,当我介绍完TT模版和源代码管理工具之后我们就能够进入到权限的设置,坚持就是胜利。
1. DbSession接口的约束
(1)DbSession就是我们整个数据库访问层的入口,那么我们DbSession也必须由一个接口的约束,那么我们在数据库访问接口层(LYZJ.UserLimitMVC.IDAL类库)加个接口约束,新建接口IDbSession。在IDbSession中有这么几个方法,代码如下:
1 namespace LYZJ.UserLimitMVC.IDAL 2 3 { 4 5 public interface IDbSession 6 7 { 8 9 //每个表对应的实体仓储对象 10 11 IDAL.IRoleRepository RoleRepository { get; } 12 13 IDAL.IUserInfoRepository UserInfoRepository { get; } 14 15 //将当前应用程序跟数据库的会话内所有实体的变化更新会数据库 16 17 int SaveChanges(); 18 19 //执行Sql语句的方法 20 21 //EF4.0的写法 22 23 //int ExcuteSql(string strSql, ObjectParameter[] parameters); 24 25 //EF5.0的写法 26 27 int ExcuteSql(string strSql, DbParameter[] parameters); 28 29 } 30 31 }
(2)首先添加的是每个表对应的实体仓储对象,
(3)添加SaveChanges方法的接口
(4)添加ExcuteSql方法的接口,int ExcuteSql(string strSql,ObjectParameter[] parameters),它的作用就是执行Sql脚本,那么如果我们再数据库接口层添加了接口之后,我们数据库访问层的DbSession就要继承自IDbSession接口,然后实现接口中的所有的方法,那么修改后的DbSession中的代码如下:
1 namespace LYZJ.UserLimitMVC.DAL 2 3 { 4 5 //一次跟数据库交互的会话 6 7 public class DbSession : IDbSession //代表应用程序跟数据库之间的一次会话,也是数据库访问层的统一入口 8 9 { 10 11 public IDAL.IRoleRepository RoleRepository 12 13 { 14 15 get { return new RoleRepository(); } 16 17 } 18 19 public IDAL.IUserInfoRepository UserInfoRepository 20 21 { 22 23 get { return new UserInfoRepository(); } 24 25 } 26 27 //代表:当前应用程序跟数据库的会话内所有的实体的变化,更新会数据库 28 29 public int SaveChanges() 30 31 { 32 33 //调用EF上下文的SaveChanges方法 34 35 return DAL.EFContextFactory.GetCurrentDbContext().SaveChanges(); 36 37 } 38 39 //执行Sql脚本的方法 40 41 public int ExcuteSql(string strSql, System.Data.Common.DbParameter[] parameters) 42 43 { 44 45 //Ef4.0的执行方法 ObjectContext 46 47 //封装一个执行SQl脚本的代码 48 49 //return DAL.EFContextFactory.GetCurrentDbContext().ExecuteFunction(strSql, parameters); 50 51 throw new NotImplementedException(); 52 53 } 54 55 } 56 57 }
2.对EF操作SQL语句的小记
(1)在这里大家如果看我上面代码的话会看到执行SQl语句的方法是个空方法,我想请问大家在EF5.0里面执行SQL语句的方法是什么,我只知道4.0的方法,如果大家知道的话请给我留言,谢谢大家。
(2)我们在使用EF框架的时候也可以跟ADO.NET进行配合,它们之间不是互斥的,我们的项目在某些特殊的功能中还是可以使用ADO.NET来实现的。
3.业务逻辑层DbSession线程内唯一
(1)通过前面的博客我们知道我们将数据库访问层的BaseRepository(仓储)使用简单工厂来实现了线程内唯一的定义,代码如下:
1 //获取的是当前线程内部的上下文实例,而且保证了线程内上下文唯一 2 3 private DbContext db = EFContextFactory.GetCurrentDbContext();
(2)按照上面的说法的话,那么我们的业务逻辑层来获取DbSession的时候也是使用简单工厂来实现线程内唯一,那么我们修改DbSession的定义如下:
1 //DbSession的存放 2 3 public IDbSession _DbSession = DbSessionFactory.GetCurrenntDbSession();
(3)根据(2)里面的代码我们可以看到,这时候我们需要在数据库访问层,也就是(LYZJ.UserLimitMVC.DAL)下面创建一个DbSessionFactory类,我们使用这个类来实现GetCurrentDbSession方法,这样我们的DbSession也就实现了线程内唯一。
(4)那么最后我们实现的DbSessionFactory的代码如下所示,因为在前面我已经介绍过实现线程内唯一了,所以这里就不详细的介绍了,适当的注释一下:代码如下:
1 namespace LYZJ.UserLimitMVC.DAL 2 3 { 4 5 public class DbSessionFactory 6 7 { 8 9 //保证了线程内DbSession实例唯一 10 11 public static IDbSession GetCurrenntDbSession() 12 13 { 14 15 //这里的GetData()方法的key不能和上下文的一样 16 17 IDbSession _dbSession = CallContext.GetData("DbSession") as IDbSession; 18 19 if (_dbSession == null) 20 21 { 22 23 _dbSession = new DbSession(); 24 25 //将值设置到数据槽里面去 26 27 CallContext.SetData("DbSession", _dbSession); 28 29 } 30 31 return _dbSession; 32 33 } 34 35 } 36 37 }
(5)在这里要注意的是我们什么时候使用简单工厂,什么时候使用new?那就是我们的实例的生命周期的时候,我们要进行控制他,如果我们不控制的话那么我们直接使用new即可。比如我们的表实体我们如果想创建的话,那么我们直接new一个就可以了,而不需要去创建一个简单工厂。
4.小结
(1)这篇Demo的底层框架我们到这里就实现完了,今天写的比较少,因为只有实现了一个知识点,那就是对DbSession的线程内唯一的访问。明天开始我将继续写如何使用T4模版和源代码管理工具,当介绍完这些的时候,我就会正式开始介绍权限系统。谢谢大家的支持
(2)这里因为底层的东西基本也就这些东西了,后面的东西都是在这些基础上面进行扩展,所以现在看整个系统的架构如图所示:
Kencery返回本系列开篇
ASP.NET MVC+EF框架+EasyUI实现权限管理系列(8)-DbSession线程内唯一相关推荐
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(13)-权限设计
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(13)-权限设计 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 (2):数据 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(14)-主框架搭建
ASP.NET MVC+EF框架+EasyUI实现权限管理系列(14)-主框架搭建 原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(14)-主框架搭建 ASP.NET MV ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(18)-过滤器的使用和批量删除数据(伪删除和直接删除)...
ASP.NET MVC+EF框架+EasyUI实现权限管理系列(18)-过滤器的使用和批量删除数据(伪删除和直接删除) 原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(18)-过 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(17)-注册用户功能的细节处理(各种验证)...
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(17)-注册用户功能的细节处理(各种验证) ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理(附源码)
前言目录 前言:时间很快,已经快到春节的时间了,这段时间由于生病,博客基本没更新,所以今天写一下我们做的一个项目吧,是对权限的基本操作的操作,代码也就不怎么说了,直接上传源码和图片展示,下面我们直接进 ...
- ASP.NET MVC 企业级实战 —— 创建用户权限管理范例程序(三)
上一篇,主要讲解了模型的创建和利用Entity Framework来操作数据库,这篇我们会讲解如何创建控制器和视图. 由于最近很多网友反馈在VS 2012 无法安装NBlock框架模版,故再次声明,N ...
- 一起谈.NET技术,专访微软MVP衣明志:走进ASP.NET MVC 2框架开发
日前微软已经发布ASP.NET MVC 2框架RC版,究竟这次RC版本的发布对于WEB开发者带来怎样的改变?以及未来ASP.NET MVC 2正式版还会有哪些改进?带着这样的问题,我们51CTO记者彭 ...
- 《精通 ASP.NET MVC 3 框架(第三版)》----第2章 准备工作 2.1 准备工作站
本节书摘来自异步社区<精通 ASP.NET MVC 3 框架(第三版)>一书中的第2章,第1节,作者: [美]Adam Freeman , Steven Standerson,译者: 林逸 ...
- ASP.NET MVC 生成简单的 xml 权限结构
ASP.NET MVC 生成简单的 xml 权限结构 当我的一个项目到尾声时,发现系统很多模块权限有遗漏.部分模块权限遗漏是由于前期开发速度太快,开发人员未先给模块加权限而后再编写该模块功能代码.当我 ...
- 《ASP.NET MVC 4框架揭秘》试读章节
新作<ASP.NET MVC 4框架揭秘>于两日前分别在互动网和当当网预售,得到了广大网友,尤其是园子里面的兄弟们的热烈响应和积极支持,作为作者的我甚为感动.今天将两个试读章节发布出来,朋 ...
最新文章
- 单词搜索(二维字符网格中)
- 第十五届全国大学生智能车全国总决赛获奖信息-华南赛区
- python中进制_python中进制的算法
- SQL语句获取数据库名、所有表名、所有字段名及字段类型
- Visual C++——LoadBitmap加载位图的操作过程
- java如何实现乌龟爬行_乌龟是怎样爬行的
- OGNL是Object-Graph Navigation Language
- html radio 作用域,ionic 表单输入 ion-checkbox ion-radio ion-toggle ion-spinner
- 1117. H2O 生成
- hbase sqoop 实验_Hive/hbase/sqoop的基本使用教程~
- 使用bottle进行web开发(9):文件上传;json传递
- DevExpress DXperience 的本地化(汉化)方法
- 炜煌T3POS58微打参数设置方法
- R语言绘图—主题选择
- 简洁的圆形时钟数字时钟+指针时钟(1+X Web前端开发初级 例题)
- NRF52832-USB-Dangle-DIY笔记
- 网站404页面设计怎么做?
- React启动报错These dependencies were not found:
- 从0开始Go语言,用Golang搭建网站
- 欧几里得距离、曼哈顿距离和切比雪夫距离
热门文章
- 【C++】一次遇到的需要加入const属性的情况
- java权限管理selor_Java进阶学习第四天——DOM入门
- @autowired注解 抽象类_Spring容器注解注入
- 按键消抖的原理与解决方案浅论
- Thread中断的理解
- 学习打卡-2018/08/13
- Fresco几处不太好的地方
- 学用 ASP.Net 之 字符串 (3): string 类的非扩展方法
- 【数据结构】线性表之数组---C++语言描述
- pyzabbix 删除触发器_Zabbix实现批量监控端口状态的方法