这里涉及到两个关键对象,一个是DbProvider,另一个就是DbFactory。粗略草图如下:

  

  从上图可以看出,开放给消费者的接口就是DbProvider类,不过他主要继承IDbProviderExtend与IDbProvider接口。

  IDbProvider接口提供单表操作、多表查询、扩展操作、实务操作。GetReqository主要作用是单表标准查询、修改、删除、聚合函数;GetQuery主要左右是多表查询;GetDbExtension主要针对一些扩展操作,比喻存储过程,执行sql语句等。至于Begin,Commit,RollBack就是涉及事务操作了。

  IDbProviderExtend接口主要就是执行数据库底层操作了,也就是对SqlHelper的封装吧,读者可以这样去理解的。这里这样单独一个接口出来,主要是为了隔离IDbProvider接口直接操作数据库。虽热IDbProvider接口是数据库提供者对象的入口,但是本质操作数据库却是IDbProviderExtend。

 在DbProvider中依赖抽象类DbFactory。在抽象类里面根据配置文件的数据库连接字符串,区别当前实例是mssql还是mysql还是oracle,或者其他数据库类型,主要是根据反射动态加载要调用的实例对象。因为该抽象类是依赖在DbProvider中,那么这个抽象类一定要定义出在该数据库类型下,ORM怎么翻译语句(不同数据库sql语句存在差异),怎么具体执行数据库操作等。

  那么综合来说,Factory中主要是封装了a、动态加载数据库类型实例;b、翻译功能;c、获取单表多表操作对象;d、具体数据库执行操作对象,包含事务处理。而DbProvider则通过Init方法初始化具体数据库类型实例对象Factory,执行对应的功能点。

ORM之三:DbProvider与DbFactory的更多相关文章

  1. 我的ORM之三 -- 更新

    我的ORM索引 更新语法 var 影响行数 = dbr.表.Update(实体).Where(条件).Execute(); 实体类型: 更新的实体类型和添加的实体类型一样,有三类: 1. 任何C#类. ...

  2. 我的ORM汇总

    MyOql是我写的ORM,目前仅支持 MSSql2005+ ,从2009年到今天,已使用过不少项目,之后会写 其它关系数据库的解析器: MySql,Sqlite,Oracle 等. 代码地址(最新版) ...

  3. ORM系列之三:Dapper

    目录 1.Dapper 简介 2.Dapper 安装 3.Dapper 使用 Dapper简介 Dapper是一个轻量级的ORM框架,短小精悍,正如其名.对于小项目,使用EF,NHibernate这样 ...

  4. Farseer.net轻量级开源框架 中级篇:DbFactory数据工厂

    导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 中级篇: 执行SQL语句 下一篇:Farseer.net轻量级开源框架 中级篇: 数据绑定 ...

  5. 一个类搞定SQL条件映射解析,实现轻量简单实用ORM功能

    个人觉得轻简级的ORM既要支持强类型编码,又要有执行效率,还要通俗易懂给开发者友好提示,结合Expression可轻松定制自己所需要功能. Orm成品开源项目地址https://github.com/ ...

  6. Enterprise Solution 3.1 企业应用开发框架 .NET ERP/CRM/MIS 开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    行业:基于数据库的制造行业管理软件,包含ERP.MRP.CRM.MIS.MES等企业管理软件 数据库平台:SQL Server 2005或以上 系统架构:C/S 开发技术 序号 领域 技术 1 数据库 ...

  7. CYQ.Data V5 从入门到放弃ORM系列:框架的优势

    前言: 框架开源后,学习使用的人越来越多了,所以我也更加积极的用代码回应了. 在框架完成了:数据库读写分离功能 和 分布式缓存功能 后: 经过三天三夜的不眠不休,终于完成框架第三个重量级的功能:自动化 ...

  8. 一个简单得不能再简单的“ORM”了

    本文适合初学者,老鸟请点赞即走,谢谢. 文字功底有限,表述不恰当的地方,请各位多多包涵. 一,核心 现在ORM已经很多了,功能也齐全了,大家说我这是干无聊的事,造的连车轮子都还不算,反正我就当学习. ...

  9. 十四、EnterpriseFrameWork框架核心类库之简易ORM

    在写本章前先去网上找了一下关于ORM的相关资料,以为本章做准备,发现很多东西今天才了解,所以在这里也对ORM做不了太深入的分析,但还是浅谈一下EFW框架中的设计的简易ORM:文中有一点讲得很有道理,D ...

随机推荐

  1. bzoj1293: [SCOI2009]生日礼物

    单调队列 用一个堆维护目前每个颜色在里面的点,每回取出队首点,并更新答案.一旦哪个颜色的点都被用完,跳出循环. #include<cstdio> #include<algorithm ...

  2. [ZOJ 2836] Number Puzzle

    Number Puzzle Time Limit: 2 Seconds      Memory Limit: 65536 KB Given a list of integers (A1, A2, .. ...

  3. JQuery focus()

    跳转到登陆页面时可以使用focus方法 <input name="login_account"id="login_account"class=" ...

  4. JPA--多对多关系

    JPA中,多对多关系用@ManyToMany标示. 关系维护端: package com.yl.demo1.bean.manyTomany; import java.util.HashSet; imp ...

  5. 引用的时候js不能使用虚拟路劲,调试时用排除法测试

    今天碰到2个问题,搞了半天都没明白,又不报错: 就是js的问题:-->我返回了一个json,返回的json是正确的,但是view页面接受不到这个虚拟对象. 完全懵了,不知道为什么view页面接受 ...

  6. 如何编写Linux设备驱动程序

    一.Linux device driver 的概念 系统调用是操作系统内核和应用程序之间的接口,设备驱动程序是操作系统内核和机器硬件之间的接口.设备驱动程序为应用程序屏蔽了硬件的细节,这样在应用程序看 ...

  7. HDU 5603 the soldier of love 离线+树状数组

    这是bestcorder 67 div1 的1003 当时不会做 看了赛后官方题解,然后翻译了一下就过了,而且速度很快,膜拜官方题解.. 附上官方题解: the soldier of love 我们注 ...

  8. CCF 认证4

    题意:求强联通分量 Tarjan算法 #include<iostream> #include<stdio.h> #include<stdlib.h> #includ ...

  9. javascript设计模式4

    静态成员是直接通过类对象访问的 var Book=(function(){ var numOfBooks=0; function checkIsbn(isbn){ ... } return funct ...

  10. 检索表中所有列的名称、DB中的用户表

    一.检索某个表中所有列的名称 SELECT name FROM syscolumns WHERE ID = OBJECT_ID('Departments') syscolumns (sys.sysco ...