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

  先发一下前两章的链接

  篇一: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. MySQL 安装 5.0

    MySQL免安装版配置 1.下载 MySQL 免安装版 2.将 MySQL 解压到待安装目录,使用%MYSQL_HOME%表示 3.打开文件my-huge.ini另存为my.ini,在my.ini文件 ...

  2. mySQL内存及虚拟内存优化设置

    为了装mysql环境测试,装上后发现启动后mysql占用了很大的虚拟内存,达8百多兆.网上搜索了一下,得到高人指点my.ini.再也没见再详细的了..只好打开my.ini逐行的啃,虽然英文差了点,不过 ...

  3. 深入理解Java Proxy

    深入理解Java Proxy: http://blog.csdn.net/rokii/article/details/4046098 整理之后的代码: package com.stono.reftes ...

  4. C++中的Traits技法

    Traits广泛应用于标准程序库.Traits classes使得"类型相关信息"在编译期可用. 认真读完下面的示例,你应该就懂了Traits技法,其实并不难. #include ...

  5. 手机APP测试思路及测试要点

    一  手机APP测试基本思路: 测试计划--测试方案--测试用例--执行: 很多小公司都没有具体的需求,项目时间也比较紧,而且流程也不是很严谨,在这样的情况之下,作为测试的我们,该怎样去对项目进行用例 ...

  6. jmeter测试计划

    测试计划配置 用户定义的变量: 测试计划上可以添加用户定义的变量.一般添加一些系统常用的配置.如果测试过程中想切换环境,切换配置,一般不建议在测试计划上添加变量,因为不方便启用和禁用,一般是直接添加用 ...

  7. POJ1664(整数划分)

    放苹果 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 30894   Accepted: 19504 Description ...

  8. android.os.NetworkOnMainThreadException 异常

    记下来以后备用 StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() .detectDiskReads() .detectD ...

  9. OpenLayers.Map的一些特殊事件

    开年上班的第二天,无意中看到一些没见过的事件,特地来给广大人民群众报个信. 众所周知的,map里面的 eventListeners 支持的事件挺多的,比如: var map = new OpenLay ...

  10. mac下导出kindle单词本的单词

    平常都是用kindle来看电子书,偶尔也会看上一些英文书籍,不可避免的会遇到不少陌生的单词,而kindle专门针对这种需求,做了不少优化,可以直接在kindle上面查阅单词,甚至可以背单词.但是毕竟不 ...