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实现权限管系列 (开篇) ...
随机推荐
- 文章3说话 微信商城云server创建后台
一个. 应用server资源 想要进行微信开发.少不了后台server端程序的开发,那么我们首先就要申请server资源.眼下有非常多云server可选,比方新浪的sae ...
- defgen工具
构造defgen档 由于 Oracle 和 SQL Server 中的数据类型不同.所以您必须建立数据类型转换.GoldenGate 提供了一个名为 DEFGEN 的专用工具.用于生成数据定义,当源表 ...
- Android异步任务
本文主要探讨Android平台提供的各种异步载入机制,包括它们的适用场景.用法等. 1. AsynTask AsynTask适用于最长能够持续几秒钟的短时间的操作,对于长时间的操作,建议使用java. ...
- web报告工具FineReport在使用方法和解决方案常见错误遇到(一)
FineReport在使用方法和解决方案常见错误遇到(一) 这里写的开胃菜.我希望我们能理清自己的问题和解决办法干出来的,Mark一点点.有利于所有. 失败搜索出,如果有一个文件,看看你的度娘那里.看 ...
- OC动态创建的问题变量数组.有数组,在阵列13要素,第一个数据包阵列,每3元素为一组,分成若干组,这些数据包的统一管理。最后,一个数组.(要动态地创建一个数组).两种方法
<span style="font-size:24px;">//////第一种方法 // NSMutableArray *arr = [NSMutable ...
- NGUI 3.5教程(四)Atlas和Sprite(制作图片button)
Atlas是NGUI的图集.我的理解是:Atlas把你的一些零散的图片,合并成一张图.这样做的优点是,能够减少Draw Call.我不了解它的底层运作机制,我猜应该也是再行进DXT之类的纹理压缩,所以 ...
- UVA11396-Claw Decomposition(二分图判定)
题目链接 题意:能否将一张无向连通图分解成多个爪型.每一条边仅仅能属于一个爪型,每一个点的度数为3. 思路:当图分解成类干个爪型时,每条边仅仅属于一个爪子,所以每条边的两个点一定要处于2个不同的鸡爪中 ...
- Jsoup一个简短的引论——采用Java抓取网页数据
转载请注明出处:http://blog.csdn.net/allen315410/article/details/40115479 概述 jsoup 是一款Java 的HTML解析器,可直接解析某个U ...
- Android+NDK+CDT+eclipse+OPenGL ES编制和native调试
周围环境: NDK版本号r8,eclipse和Android运用adt-bundle-windows-x86打包版本是更方便, 一.NDK汇集 1.源代码 NDK的examples文件夹中有Hello ...
- bnu 34982 Beautiful Garden(暴力)
题目链接:bnu 34982 Beautiful Garden 题目大意:给定一个长度为n的序列,问说最少移动多少点,使得序列成等差序列,点的位置能够为小数. 解题思路:算是纯暴力吧.枚举等差的起始和 ...