前面两篇文章介绍了框架的思路及里面大概的实现过程,那时候忘记上传项目,就补发一下。顺便介绍下框架使用方式,并分析下框架使用的优缺点。

  先发一下前两章的链接

  篇一:http://www.cnblogs.com/jnxzk/p/6443192.html

  篇二:http://www.cnblogs.com/jnxzk/p/6493054.html

  进入正题:

  之前说了,一开始做的时候是为了方便数据库的访问,其实数据库的访问,最重要的就是sql语句。因此,我的框架并没有创造什么语法,使用风格是类似sql语法,因为我想,如果创造语法,那么使用的人还需要先学习怎么使用,而完全sql风格,那就不用说了,大家都学过了,一看明了的。

  并且为了更进一步封装方法,有点类似ORM框架,封装四个方法 Select,Update,Delete和Insert扩展方法,这个直接可以在模型对象上就可以点出来的方法,所以也比较方便。框架支持sql 和 mysql,其他的数据库需用户自己扩展。

  首先,是配置。使用框架需要配置。

  一:数据库使用都有配置文件,只要在配置文件加上connectionStrings,这个节点里存放一个是数据库名字,连接串和数据库类型。

  例:

<add name="SQL" connectionString="Data Source=CN-20161106HMJI;Initial Catalog=ShopInfo;Integrated Security=True" providerName="SQL"/>

  这里要注意的是最前面的name和最后的数据库类型。

  因为框架支持多数据库,因此name是用来区分正使用哪个数据库的关键,并且在其他还会用到,下面再说。第二个是provideName,这是数据库类型,类型只能是静态类DBType中的静态字段,目前只有SQL和MySQL,这是用来区分数据库的。如果使用了配置,那在应用程序一开始执的行时候调用 Config.Start()方法即可。

  二:模型的类上,可以加上两个特性,Connection 与 OConnection。

    这两个特性就是为四个简便的扩展方法而用。Connection构造函数有一个参数,这个参数就是上边说到很重要的name。要跟你要将模型保存到哪个数据库,上边就填写哪个数据库的name。

    而OConnection是为了更智能性,用户可以通过配置,来一次性定义保存模型到哪个库中。这个配置文件配置在appsettings中。key用户自己命名,那value就是上边的数据库名name。使用这个配置后,在应用程序一开始时候加上Config.ConfigConnection(key);key就是你刚刚那个配置里的key里的值。

    模型类上使用其中的任意一种。

  三:这个是必须的,在模型里,作为主键的属性上边,加上PKey特性(如果一张表有多个,那么都加上),这个很显然的功能。

  四:异常的设置,如果执行阶段的发生的异常需要保存,那就写个无参无返回值的静态方法,使用DBException.AddEvent += 你的方法名   即可。

  上面对数据库的配置好处就是,如果数据库改变了,或是原本是mysq,现在升级成sql,那配置里修改即可,代码都不需要动。

好了,配置完成了。来介绍下使用方式,按上边看,就知道了有两种使用方式。

  第一种较为简单,使用Select,Update,Delete和Insert扩展方法,都要先实例模型对象,然后在模型对象上使用方法。

  Select,Delete,Update使用的要求是主键要有值,这样才能找出你要操作是哪个是吧。Update不会更新主键部分;Insert就没什么要求,所有字段有值就可以。

  这几个方法都有一个可选参数,就是操作的字段(除了Delete)。在使用的地方要引用该类库。

  第二种方式:

  使用DBHelper,在使用后要调用dispose,或者using来释放空间。

  DBHelper里有几种最终执行的方法,比如执行影响行数,获取List,等等。这里最重要的是ExcuteString方法。

  DBHelper因为是链式的,因此有先后执行顺序,使用方法的顺序是:

  helper先调用Connection(string name)获取数据库(数据库name) 或者createConnection(string Name, string ConnectionString, string type) 创建数据库。

  其次就是先使用ExcuteString()

  最后是最后执行的操作,ToList,ToModel,ExcuteResult等等,在项目里有注释各个功能。

  ExcuteString需要解释下,这里面其实是拼接字符串,也同样是链式编程。使用格式如下:

  (Sleect | Delete | Insert | Update) + Form(可选参数,给视图,存储过程使用) +AndPKey(补充主键约束,如果是模型中的表,使用这个就可以了,如果多表那就使用AndMulTable,自动补充表间关联字段) + (where 条件 | or 条件 | where 不等 条件 | or 不等条件) + OrderBy(可选参数) + Top(可选参数)

  例子:

helper.ExcuteString(o => o.Select<PlaceInfo>().AndNIn("SAddNo", o1 => o1.Select<PlaceInfo>().Top()).Top()).ToList<PlaceInfo>();

  支持嵌套查询,因此做最常用的分页也不是难事。上边这个是分页的操作,如果把两个top里面数值改成需要传的参数,就可以改造成任意的页了,项目中也写好了注释。

  好了,使用方式就到此为止,来分析下框架吧。

  首先,已经屏蔽掉所有底层的东西了。

  第二,因为里面大量的使用反射,时间消耗自然是很慢的,所以设置反射的缓存是必须的,不过缓存不是对数据,是在反射,还有搜索主键的地方,在使用久后,里面对各个模型类都已经有了缓存,使用就不会有问题了。

  第三,对多种数据库也只使用一套模型,如果是EF,那一套模型只对应一个数据库,如果下次更换数据库,那不是得重新的做。

  第四,扩展部分。之前文章里说过,框架是极大的支持开闭原则。因此,如果以后要扩展数据库,那只要再DBType里多增加一个你的字段比如 Oracle,然后底层的实现方法,新建三个实现IDBCode ,IDBExcute,IDBInstance接口的类,在三个类下实现那些方法。好了,这样就扩展了一个数据库。这时候如果要用这个数据库,只需要在配置处修改你想保存新的数据库中,其他代码可以一个字都不要动。

  缺点是:

  第一,没有可视化工具。他们工具都可以自动生成,这个目前没有,如果等我学校毕业后,有大量时间投在编代码上时,我就可以拿出许多时间写了。

  第二,链式编程,还没办法实现像EF这样,其实链式最厉害的应该是拼接,拼接如果能够做到前后顺序无关,我觉得是极大的提升。

  其他缺点,就留给读者去发现了。

  好了,对数据库的封装结束了,框架是EasyDb类库中。其他地方要使用就引用该类库就可以了,里面还有一个是我作为测试的控制台程序。

  链接是:http://files.cnblogs.com/files/jnxzk/EasyDbSolution.rar

  有什么问题可以在下边评论~~

C# .NET更智能的数据库操作封装项目的更多相关文章

  1. C# .NET更智能的数据库操作的封装

    前述: 对数据库操作的封装,相信网络上已经有一大堆,ORM框架,或者是.NET本身的EF,都很好的支持数据库操作.这篇文章是分享自己所思考的,对数据库操作的简单封装.我对于这篇文章,认为被浏览者所关注 ...

  2. C# .NET更智能的数据库操作的封装完整版(重构)

    前述: 第一次发表文章,不过是对数据库简单的封装,主要是阐述下思路.那么在上篇文章,在大家的指导下和提出意见,并自己对代码进行了思考.在这两天我重构了新的框架,我觉得我写的可以称得上框架,为什么?请大 ...

  3. jsp数据库连接大全和数据库操作封装到Javabean

    一.jsp连接Oracle8/8i/9i数据库(用thin模式) testOracle.jsp如下: <%@ page contentType="text/html;charset=g ...

  4. PHP mysqli 扩展库(面向对象/数据库操作封装/事务控制/预编译)

    1.和mysql扩展库的区别: (1   安全性.稳定性更高 (2  提供了面向对象和面向过程两种风格 2.php.ini  中的  extension=php_mysqli.dll 解除封印 3.面 ...

  5. python - 接口自动化测试 - MysqlUtil - 数据库操作封装

    # -*- coding:utf-8 -*- ''' @project: ApiAutoTest @author: Jimmy @file: mysql_util.py @ide: PyCharm C ...

  6. C# .NET数据库操作

    C# .NET更智能的数据库操作的封装完整版(重构)   前述: 第一次发表文章,不过是对数据库简单的封装,主要是阐述下思路.那么在上篇文章,在大家的指导下和提出意见,并自己对代码进行了思考.在这两天 ...

  7. ado.net的简单数据库操作(二)之封装SqlHelperl类

    今天我书接上回,接着昨天的ado.net的数据库操作的相关知识来讲哈! 从上篇文章给出的实例来看,你一定会发现,操作数据库其实还挺麻烦的,就连一个最简单的数据库操作语句都要包括 定义数据库连接字符串. ...

  8. ThinkPHP 数据库操作(一) : 连接数据库

    ThinkPHP内置了抽象数据库访问层,把不同的数据库操作封装起来,我们只需要使用公共的Db类进行操 作,而无需针对不同的数据库写不同的代码和底层实现,Db类会自动调用相应的数据库驱动来处理.采用 P ...

  9. c#数据库访问服务(综合数据库操作)

    前面给大家说封装了常用的数据库,并且整理了使用.最近我再次把项目整合了.做成比较完善的服务. 还是重复的说下数据库操作封装. berkeley db数据库,Redis数据库,sqlite数据库. 每个 ...

随机推荐

  1. iOS 之 NSUserDefault

    1. 概念 NSUserDefaults是一种特殊的property list.是系统封装的属性列表,方便记录简单的数据. 2. 使用说明 2.1. 创建NSUserDefaults NSUserDe ...

  2. 【WebService】WebService学习笔记

    WebService三要素 WebService三要素SOAP(Simple Object Access Protocol).WSDL(WebServicesDescriptionLanguage). ...

  3. List与Linkedlist、Arrylist、Vector、Map应用

    1.List与LinkedList      List是数组链表     LinkedList是指针链表     选择List还是LinkedList要看你的使用特点.       数组链表访问快,复 ...

  4. Android应用的基本组件介绍和签名Android应用程序

    一.Android应用的基本组件介绍  Activity和View :Activity只能通过setContentView(View)来显示指定的组件.View组件是所有UI控件.容器控件的基类,Vi ...

  5. WinForm 进程、线程

    一.进程 进程是一个具有独立功能的程序关于某个数据集合的一次运行活动. 它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体. Process 类,用来操作进程. 命名空间:using Sys ...

  6. codeforces div2.C

    C. New Year and Rating time limit per test 2 seconds memory limit per test 256 megabytes input stand ...

  7. Python学习--19 网络编程

    TCP编程 Client 创建一个基于TCP连接的Socket: # coding: utf-8 import socket # 创建一个TCP连接: s = socket.socket(socket ...

  8. C语言 memcpy二维数组的复制

    今天在实现二维数组的复制功能时,竟然出现了好多问题,还是太不小心了. 我们知道,平时进行矩阵复制,无非是二重循环进行赋值操作,所以今天想改用利用memcpy进行复制操作,当然一维数组的复制在上一篇文章 ...

  9. Ajax异步获取html数据中包含js方法无效的解决方法

    页面上使用js写了一个获取后台数据的方法 function data() { var tab = $("#dic") $.ajax({ url: '../demo.ashx?met ...

  10. css居中问题

    学习过程中遇到css居中问题 , 也查阅了资料,每个人的方法都不尽相同,而且当时看懂了,过后就记混淆了;so作为一个前端小白,也来写一下俗话说好脑子不如烂笔头,毕竟自己知道的也不多,其实是抱着学习和交 ...