ASP.Net MVC OA项目笔记<五>
1.1.1 抽象工厂封装数据操作类实例创建,然后DBSession调用抽象工厂,修改DBSession
CZBK.ItcastOA.DALFactory数据会话层调数据层不能直接new,要封装一下解耦
1.2.1 CZBK.ItcastOA.DALFactory 新增抽象工厂类 AbstractFactory
1.2.2 Web.config中配置一下配置信息(数据层的程序集和命名空间)
<!--配置程序集名称和命名空间名称-->
<add key="AssemblyPath" value="CZBK.ItcastOA.DAL" />
<add key="NameSpace" value="CZBK.ItcastOA.DAL" />
1.2.3 引入 System.configuration,因为要读取配置信息
1.2.4 抽象工厂类 AbstractFactory代码
- /// <summary>
- /// 通过反射的形式创建类的实例
- /// </summary>
- public class AbstractFactory
- {
- //读取配置的程序集和命名空间
- private static readonly string AssemblyPath = ConfigurationManager.AppSettings["AssemblyPath"];
- private static readonly string NameSpace = ConfigurationManager.AppSettings["NameSpace"];
- public static IUserInfoDal CreateUserInfoDal()
- {
- string fullClassName = NameSpace + ".UserInfoDal";
- return CreateInStance(fullClassName) as IUserInfoDal;//把反射封装在这个方法里
- }
- private static object CreateInStance(string className)
- {
- //加载程序集
- var assembly = Assembly.Load(AssemblyPath);
- return assembly.CreateInstance(className);
- }
- }
1.2.5 通过抽象工厂封装了类的实例的创建
1.2.6 这样就完全解耦了,以后不管换成什么DAL,只要更改配置文件就行
1.3.1 各个会话层都是通过接口来调用,所以数据会话层也需要一个接口
面向接口编程,通过这种方式来解耦
IDAL添加一个接口IDBSession
首先IDAL也要引用一下EF,通过添加实体数据模型引用
- /// <summary>
- /// 业务层调用的是数据会话层的接口
- /// </summary>
- public interface IDBSession
- {
- DbContext Db { get; }
- IUserInfoDal UserInfoDal { get; set; }
- bool SaveChanges();
- }
1.3.2 让DBSession继承IDBSession
- /// <summary>
- /// 1.数据会话层:就是一个工厂类,负责完成所有数据操作类实例的创建,然后业务层通过数据会话层来获取要操作数据类的实例,
- /// 所以数据会话层将业务层和数据层解耦。
- /// 2.在数据会话层中提供一个方法:完成所有数据的保存。
- /// </summary>
- public class DBSession:IDBSession
- {
- //OAEntities Db = new OAEntities();
- public DbContext Db
- {
- get
- {
- return DBContextFactory.CreateDbContext();
- }
- }
- private IUserInfoDal _UserInfoDal;
- public IUserInfoDal UserInfoDal
- {
- get
- {
- if(_UserInfoDal==null)
- {
- //_UserInfoDal= new UserInfoDal();
- //通过抽象工厂封装了类的实例的创建
- _UserInfoDal = AbstractFactory.CreateUserInfoDal();
- }
- return _UserInfoDal;
- }
- set
- {
- _UserInfoDal = value;
- }
- }
- /// <summary>
- /// 一个业务中经常涉及到对多张表的操作,我们希望连接一次数据库,完成对这张表数据的操作,提高性能
- /// 工作单元模式
- /// </summary>
- /// <returns></returns>
- public bool SaveChanges()
- {
- return Db.SaveChanges() > ;
- }
- }
ASP.Net MVC OA项目笔记<五>的更多相关文章
- ASP.Net MVC OA项目笔记<二>
1.1.0 创建数据层 1.1.1 CZBK.ItcastOA.IDAL 引用 CZBK.ItcastOA.Model 1.2.1 给IDAL添加一个接口IUserInfoDal 里面写增删改查分页的 ...
- ASP.Net MVC OA项目笔记<六>
1.1.1 开始写业务,先写业务的实现再写业务的接口 业务类中也是有写增删改查公用的方法 引用Model,IDAL,DALFactory BLL添加两个类 UserInfoService,BaseSe ...
- ASP.Net MVC OA项目笔记<四>
1.1.1 EF线程唯一 在数据层中用到了EF的实例,在数据会话层也用到了,所以在一个请求中只能创建一个EF实例(线程内唯一对象),把它封装成工厂类 1.1.2 为了防止相互引用,循环引用,所以这个工 ...
- ASP.Net MVC OA项目笔记<三>
1.1.1 业务层和数据层之间加一个数据会话层,封装所有数据操作类实例的创建(工厂类) 工厂类是负责对象的创建 作用:将BLL和DAL解耦了,提供一个数据访问的统一访问点 数据会话层DBSession ...
- ASP.Net MVC OA项目笔记<一>
1.1.1 新建空白解决方案CZBK.ItcastOA 1.2.1 添加类库 1.2.2 同上添加多个类库 生成的 class1.cs先不用删除,删了的后,后面可能没办法直接点引用 1.3.1 添加表 ...
- ASP.NET MVC企业级项目框架
ASP.NET MVC企业级项目框架 MVC项目搭建笔记---- 项目框架采用ASP.NET MVC+Entity Framwork+Spring.Net等技术搭建,搭建过程内容比较多,结合了抽象工厂 ...
- 使用Visual Studio 2015 开发ASP.NET MVC 5 项目部署到Mono/Jexus
最新的Mono 4.4已经支持运行asp.net mvc5项目,有的同学听了这句话就兴高采烈的拿起Visual Studio 2015创建了一个mvc 5的项目,然后部署到Mono上,浏览下发现一堆错 ...
- ASP.NET MVC搭建项目后台UI框架—1、后台主框架
目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...
- ASP.NET MVC搭建项目后台UI框架—11、自动加载下拉框查询
ASP.NET MVC搭建项目后台UI框架—1.后台主框架 需求:在查询记录的时候,输入第一个字,就自动把以这个字开头的相关记录查找出来,输入2个字就过滤以这两个子开头的记录,依次类推. 突然要用到这 ...
随机推荐
- 用 Python 写 Robot Framework 测试
Robot Framework 框架是基于 Python 语言开发的,所以,它本质上是 Python 的一个库. 1.你懂 Python 语言. 2.又想使用 Robot Framework 测试框架 ...
- SQL Server 查询中文字段返回为空
昨晚维护系统数据时,遇到个奇怪现象.明明数据库里有数据,查询结果就是返回为空.具体情况是这样的,查询工作日志表里关于工作描述的情况,以中文内容匹配工作描述字段,其中匹配内容里包含有空格. 尝试去掉第一 ...
- sql条件查询-日期比较(取年月部分)
查询当年当月的数据: select * from compalete_task where to_Char(create_date,'yyyyMM') = to_Char(sysdate,'yyyyM ...
- CRC标准以及简记式
一.CRC标准 下表中列出了一些见于标准的CRC资料: 名称 生成多项式 简记式* 应用举例 CRC-4 x4+x+1 3 ITU G.704 CRC-8 x8+x5+x4+1 31 DS18B20 ...
- 64位ubuntu 兼容32位
http://www.cnblogs.com/mliudong/p/4086797.html 首先要打开64位系统对32位的支持 第一步:确认64为架构的内核 dpkg --print-archite ...
- 2018.11.05 bzoj2143: 飞飞侠(最短路)
传送门 最短路好题. 考虑对每个二维坐标建立一个高度属性. 这样每次如果在点(i,j,0)(i,j,0)(i,j,0)只能选择花费bi,jb_{i,j}bi,j跳向(i,j,ai,j)(i,j,a_ ...
- 2018.10.27 洛谷P2915奶牛混合起来Mixed Up Cows(状压dp)
传送门 状压dp入门题. 按照题意建一个图. 要求的就是合法的链的总数. 直接f[i][j]f[i][j]f[i][j]表示当前状态为jjj,下一位要跟iii连起来的方案数. 然后从没被选并且跟iii ...
- vi三种模式的切换
基础上vi/vim共分为三种模式,分别是命令模式,输入模式和底线命令模式. 一.命令模式 用户刚刚启动vi/vim,便进入了命令模式. 在此状态下敲击键盘动作会被vim识别为命令,而非输入字符.比如我 ...
- php 操作redis 以及几个常用命令
redis-cli -h host -p port -a password 首次进入redis 进行绑定ip和端口号 del key 删除指定key exists key 检查指定key是否存 ...
- Cmd Markdown语法参考
https://www.zybuluo.com/mdeditor markdown语法说明 Markdown中公式的写法 $$P(X=k)=C_n^kp^k(1-p)^{n-k}$$ 欢迎使用 Cmd ...