ASP.NET MVC+EF框架+EasyUI实现权限管理系列(8)-DbSession线程内唯一
原文: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中有这么几个方法,代码如下:
 namespace LYZJ.UserLimitMVC.IDAL
 {
     public interface IDbSession
     {
         //每个表对应的实体仓储对象
         IDAL.IRoleRepository RoleRepository { get; }
         IDAL.IUserInfoRepository UserInfoRepository { get; }
         //将当前应用程序跟数据库的会话内所有实体的变化更新会数据库
         int SaveChanges();
         //执行Sql语句的方法
         //EF4.0的写法
         //int ExcuteSql(string strSql, ObjectParameter[] parameters);
         //EF5.0的写法
         int ExcuteSql(string strSql, DbParameter[] parameters);
     }
 }
(2)首先添加的是每个表对应的实体仓储对象,
(3)添加SaveChanges方法的接口
(4)添加ExcuteSql方法的接口,int ExcuteSql(string strSql,ObjectParameter[] parameters),它的作用就是执行Sql脚本,那么如果我们再数据库接口层添加了接口之后,我们数据库访问层的DbSession就要继承自IDbSession接口,然后实现接口中的所有的方法,那么修改后的DbSession中的代码如下:
 namespace LYZJ.UserLimitMVC.DAL
 {
     //一次跟数据库交互的会话
     public class DbSession : IDbSession //代表应用程序跟数据库之间的一次会话,也是数据库访问层的统一入口
     {
         public IDAL.IRoleRepository RoleRepository
         {
             get { return new RoleRepository(); }
         }
         public IDAL.IUserInfoRepository UserInfoRepository
         {
             get { return new UserInfoRepository(); }
         }
         //代表:当前应用程序跟数据库的会话内所有的实体的变化,更新会数据库
         public int SaveChanges()
         {
             //调用EF上下文的SaveChanges方法
             return DAL.EFContextFactory.GetCurrentDbContext().SaveChanges();
         }
         //执行Sql脚本的方法
         public int ExcuteSql(string strSql, System.Data.Common.DbParameter[] parameters)
         {
             //Ef4.0的执行方法 ObjectContext
             //封装一个执行SQl脚本的代码
             //return DAL.EFContextFactory.GetCurrentDbContext().ExecuteFunction(strSql, parameters);
             throw new NotImplementedException();
         }
     }
 }
2.对EF操作SQL语句的小记
(1)在这里大家如果看我上面代码的话会看到执行SQl语句的方法是个空方法,我想请问大家在EF5.0里面执行SQL语句的方法是什么,我只知道4.0的方法,如果大家知道的话请给我留言,谢谢大家。
(2)我们在使用EF框架的时候也可以跟ADO.NET进行配合,它们之间不是互斥的,我们的项目在某些特殊的功能中还是可以使用ADO.NET来实现的。
3.业务逻辑层DbSession线程内唯一
(1)通过前面的博客我们知道我们将数据库访问层的BaseRepository(仓储)使用简单工厂来实现了线程内唯一的定义,代码如下:
//获取的是当前线程内部的上下文实例,而且保证了线程内上下文唯一 private DbContext db = EFContextFactory.GetCurrentDbContext();
(2)按照上面的说法的话,那么我们的业务逻辑层来获取DbSession的时候也是使用简单工厂来实现线程内唯一,那么我们修改DbSession的定义如下:
//DbSession的存放 public IDbSession _DbSession = DbSessionFactory.GetCurrenntDbSession();
(3)根据(2)里面的代码我们可以看到,这时候我们需要在数据库访问层,也就是(LYZJ.UserLimitMVC.DAL)下面创建一个DbSessionFactory类,我们使用这个类来实现GetCurrentDbSession方法,这样我们的DbSession也就实现了线程内唯一。
(4)那么最后我们实现的DbSessionFactory的代码如下所示,因为在前面我已经介绍过实现线程内唯一了,所以这里就不详细的介绍了,适当的注释一下:代码如下:
 namespace LYZJ.UserLimitMVC.DAL
 {
     public class DbSessionFactory
     {
         //保证了线程内DbSession实例唯一
         public  static IDbSession GetCurrenntDbSession()
         {
             //这里的GetData()方法的key不能和上下文的一样
             IDbSession _dbSession = CallContext.GetData("DbSession") as IDbSession;
             if (_dbSession == null)
             {
                 _dbSession = new DbSession();
                 //将值设置到数据槽里面去
                 CallContext.SetData("DbSession", _dbSession);
             }
             return _dbSession;
         }
     }
 }
(5)在这里要注意的是我们什么时候使用简单工厂,什么时候使用new?那就是我们的实例的生命周期的时候,我们要进行控制他,如果我们不控制的话那么我们直接使用new即可。比如我们的表实体我们如果想创建的话,那么我们直接new一个就可以了,而不需要去创建一个简单工厂。
4.小结
(1)这篇Demo的底层框架我们到这里就实现完了,今天写的比较少,因为只有实现了一个知识点,那就是对DbSession的线程内唯一的访问。明天开始我将继续写如何使用T4模版和源代码管理工具,当介绍完这些的时候,我就会正式开始介绍权限系统。谢谢大家的支持
(2)这里因为底层的东西基本也就这些东西了,后面的东西都是在这些基础上面进行扩展,所以现在看整个系统的架构如图所示:
    
  
Kencery返回本系列开篇
ASP.NET MVC+EF框架+EasyUI实现权限管理系列(8)-DbSession线程内唯一的更多相关文章
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(7)-DBSession的封装
		
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(7)-DBSession的封装 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 ...
 - 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实现权限管理系列(21)-用户角色权限基本的实现说明
		
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(21)-用户角色权限基本的实现说明 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框 ...
 - ASP.NET MVC+EF框架+EasyUI实现权限管理系列(20)-多条件模糊查询和回收站还原的实现
		
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(20)-多条件模糊查询和回收站还原的实现 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架 ...
 - ASP.NET MVC+EF框架+EasyUI实现权限管理系列(19)-用户信息的修改和浏览
		
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(19)-用户信息的修改和浏览 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 ...
 - ASP.NET MVC+EF框架+EasyUI实现权限管理系列(18)-过滤器的使用和批量删除数据(伪删除和直接删除)
		
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(18)-过滤器的使用和批量删除数据(伪删除和直接删除) ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) ...
 - ASP.NET MVC+EF框架+EasyUI实现权限管理系列(17)-注册用户功能的细节处理(各种验证)
		
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(17)-注册用户功能的细节处理(各种验证) ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框 ...
 - ASP.NET MVC+EF框架+EasyUI实现权限管理系列(16)-类库架构扩展以及DLL文件生成修改和用户的简单添加
		
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(16)-类库架构扩展以及DLL文件生成修改和用户的简单添加 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) ...
 
随机推荐
- Linux高性能server规划——多进程编程
			
多进程编程 多进程编程包含例如以下内容: 复制进程影映像的fork系统调用和替换进程映像的exec系列系统调用. 僵尸进程以及怎样避免僵尸进程 进程间通信(Inter-Process Communic ...
 - python K-means工具包初解
			
近期数据挖掘实验,写个K-means算法,写完也不是非常难,写的过程中想到python肯定有包,尽管师兄说不让用,只是自己也写完了,而用包的话,还不是非常熟,略微查找了下资料,学了下.另外,自己本身写 ...
 - Linux/UNIX流程关系
			
流程关系 过程组 除了一个过程,每个过程ID此外.也属于一个进程组.过程基是一个或多个过程的集合. 通常它们与相同的作业相关联,它接受各种信号从相同终端. #include<unistd.h&g ...
 - 认识Require
			
1. 加载require.js文件 <script type="text/javascript" src="js/require.js" data-mai ...
 - 同一个PC只能运行一个应用实例(考虑多个用户会话情况)
			
原文:同一个PC只能运行一个应用实例(考虑多个用户会话情况) class Program { private static Mutex m; [STAThread] static void Main( ...
 - 希尔排序----java实现
			
思路:希尔排序是分组基础上的直接插入排序,给定的一个步长数组,每个小组先直接插入排序.虽然有四次循环,但是每次循环次数少. package com.sheepmu.text; import java. ...
 - 揭秘传智播客毕业班的超级薪水7k内幕系列II----Offer工资表5.7k,为什么不能让老师就业就业
			
在上海传智播客宋学生Java六期学员.在班级尚未毕业阶段,私自投递简历,而且逃课去面试,获得某国企的Offer.入职薪资5.7K,,兼有五险一金.饭补等齐全福利,因就业老师要求班级同学未毕业不要急于就 ...
 - 最少拦截系统(杭电1257)(DP)+(贪心)
			
最少拦截系统 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
 - POJ 2226 Muddy Fields(最小顶点覆盖)
			
POJ 2226 Muddy Fields 题目链接 题意:给定一个图,要求用纸片去覆盖'*'的位置.纸片能够重叠.可是不能放到'.'的位置,为最少须要几个纸片 思路:二分图匹配求最小点覆盖.和放车那 ...
 - Visual Studio Team Services使用教程--邀请团队成员