前面已经提到过了本框架的由来,时至今日该框架已经和最初版本有了天壤之别。因为仍有部分代码是采用原有的框架,所以本框架也算不上原创,只是在原有的基础上不断的改进,所以希望了解此框架的人不要过多的指责。

  一. 配置数据库连接

    在该框架中自定义了一个配置文件Database.config, 这个配置文件的根节点为<databaseList></databaseList>, 其可以包含多个子节点用于配置数据库的配置连接,具体代码如下:

<?xml version="1.0" encoding="utf-8" ?>
<databaseList>
<database name="JooShowGit">
  <connectionString>Server=127.0.0.1;database=JooShowGit;user id=sa;Password=000000</connectionString>
</database>
</databaseList>

    该配置文件可以包含多个<database></database>的节点,该配置文件可以通过反序列化的形式转化为一个集合对象,最终可以通过database的name熟悉来获取一个数据库的Connection对象. 但是这里得注意一下,如果配置了多个数据库的连接,只能配置一种类型的数据库,比如MSSQL,Oracle,MySQL,Sqlite 等,不能配置混合的数据库连接,这里是有待改进的部分。在原有的框架中 name="JooShowGit(自定义)" 只是一个唯一标识符,在系统中查找的时候更加方便,但是改进之后可以用于关联实体与数据库连接的关系。

  二. 如何加载配置文件

    配置好如上的的数据库连接之后,我们并不是自己去读取配置然后创建连接,我们需要在web.config 或者app.config文件中配置如下代码:

<appSettings>
<add key="DatabaseListFile" value="/Configs/Data/Database.config"/>
<add key="DataCommandFile" value="/Configs/Data/DbCommandFiles.config"/>
</appSettings>

    这段代码告诉我们从何处去加载配置文件,DatabaseListFile 指定了数据连接配置文件的地址,在应用程序启动之后会自动寻找这个地址加载该配置到缓存,内部实现是通过反序列化为对象集合,缓存的是对象数据。

  三. Command 配置文件

    我们都知道在.NET数据库连接操作的时候都有一个command对象,用于执行命令。在框架中所有的SQL语句都配置在配置文件中,之前文章也提到过,我是非常反感这种配置的,这里为了从基础部分讲到使用以及改造过程,这里还是先介绍一下其作用。

<?xml version="1.0" encoding="utf-8" ?>
<dataOperations> <!--User_Base所有字段的修改-->
<dataCommand name="User.UpdateAllBase" database="JooShowGit" commandType="Text">
<commandText>
<![CDATA[
UPDATE [User]
SET [UserName] = @UserName
,[Email] = @Email
,[Password] = @Password
,[RegisterDate] = @RegisterDate
,[RegisterIp] = @RegisterIp
,[Status] = @Status
,[RegisterApplicationID] = @RegisterApplicationID
,[ActiveDate] = @ActiveDate
,[LastLoginDate] = @LastLoginDate
,[LastLoginApplicationID] = @LastLoginApplicationID
,[RegisterSource] = @RegisterSource
,[AuditStatus] = @AuditStatus
,[IsLogin] = @IsLogin
,[LoginCount] = @LoginCount
,[LastLoginIp] = @LastLoginIp
,[AuditUser] = @AuditUser
,[AuditDate] = @AuditDate
,[IsDeleted] = @IsDeleted
,[OLDApplicationID] = @OLDApplicationID
,[OLDID] = @OLDID
,[RowGuid] = @RowGuid
,[IMNum] = @IMNum
,[Phone] = @Phone
,[IsEmailValidate] = @IsEmailValidate
,[IsPhoneValidate] = @IsPhoneValidate
,[StepNum] = @StepNum
,[SaleCode]=@SaleCode
,[PasswordIM]=PasswordIM
,[ActiveIP]=@ActiveIP
,[CompanyType]=@CompanyType
Where UserId=@UserId
]]>
</commandText>
<parameters>
<param name="@UserId" dbType="Int32" direction="Input"/>
<param name="@UserName" dbType="String" direction="Input"/>
<param name="@Email" dbType="String" direction="Input"/>
<param name="@Password" dbType="String" direction="Input"/>
<param name="@RegisterDate" dbType="DateTime" direction="Input"/>
<param name="@RegisterIp" dbType="String" direction="Input"/>
<param name="@Status" dbType="Int32" direction="Input"/>
<param name="@RegisterApplicationID" dbType="Int32" direction="Input"/>
<param name="@ActiveDate" dbType="DateTime" direction="Input"/>
<param name="@LastLoginDate" dbType="DateTime" direction="Input"/>
<param name="@LastLoginApplicationID" dbType="Int32" direction="Input"/>
<param name="@RegisterSource" dbType="Int32" direction="Input"/>
<param name="@AuditStatus" dbType="Int32" direction="Input"/>
<param name="@IsLogin" dbType="Int16" direction="Input"/>
<param name="@LoginCount" dbType="Int32" direction="Input"/>
<param name="@LastLoginIp" dbType="String" direction="Input"/>
<param name="@AuditUser" dbType="String" direction="Input"/>
<param name="@AuditDate" dbType="DateTime" direction="Input"/>
<param name="@IsDeleted" dbType="Int16" direction="Input"/>
<param name="@OLDApplicationID" dbType="Int32" direction="Input"/>
<param name="@OLDID" dbType="Int32" direction="Input"/>
<param name="@RowGuid" dbType="String" direction="Input"/>
<param name="@IMNum" dbType="String" direction="Input"/>
<param name="@Phone" dbType="String" direction="Input"/>
<param name="@IsEmailValidate" dbType="Int32" direction="Input"/>
<param name="@IsPhoneValidate" dbType="Int32" direction="Input"/>
<param name="@StepNum" dbType="Int32" direction="Input"/>
<param name="@SaleCode" dbType="String" direction="Input"/>
<param name="@PasswordIM" dbType="String" direction="Input"/>
<param name="@ActiveIP" dbType="String" direction="Input"/>
<param name="@CompanyType" dbType="Int32" direction="Input"/>
</parameters>
</dataCommand> </dataOperations>

Command配置文件

    从以上配置项的代码应该都应该明白,其实就是讲ADO.NET中的SQL语句以及参数配置到了这个配置文件中。每一个操作语句就要配置一个dataCommand节点,最终这个配置文件也是通过反序列化转化为List集合对象了。在最底层其实是将以上内容转化为了为了一个Command对象,在使用的时候只需要获取Command对象就可以直接操作数据了。

    name 节点属性在全局是唯一的,不能重复.

    database 指向Database.config配置文件中的name节点属性值,用于设置连接的数据库。

    commandType 用于指定执行的语句是SQL语句还是存储过程

    commandText 用于指定执行命令的语句

    parameters 指定占位符参数

  四. Command配置文件管理

    DbCommandFiles.config 文件使用于管理Command配置文件的,将Command配置文件添加到这个文件中,系统在启动的时候会默认将Command配置文件加载到缓存中,转化为Command对象。

<?xml version="1.0" encoding="utf-8" ?>
<dataCommandFiles>
<file name="DbVnPageRequestCommand.config"/>
</dataCommandFiles>

    这个文件的根节点为dataCommandFiles,其子节点为执行的Command配置文件,如果在系统中编写了N多个Command配置文件,但是没有配置到这个配置文件中,系统是不会加载该配置文件的,所以需要特别的注意。    

  五. 日志管理配置

    在原有的系统中是没有日志记录的[带有日志功能但是全部屏蔽,使用的是windows日志],自己重新开发了一个日志模板,其功能和log4net比较相似,但是没有其强大,具体怎么使用log4net查看文章<Log4Net 全方位跟踪程序运行>.

    日志使用必须要在app.config或者web.config配置文件中配置,具体配置项如下(如何实现后面再说):

<appSettings>
<add key="DatabaseListFile" value="/Configs/Data/Database.config"/>
<add key="DataCommandFile" value="/Configs/Data/DbCommandFiles.config"/>
<add key="CacheConfig" value="\Configs\Cache\cache.config"/>
<add key="console" value="true"/>
<add key="file" value="true"/>
<add key="level" value="info"/>
<add key="logpath" value="\Log\"/>
<add key="logtype" value="Daily"/>
</appSettings>

    console 项指定是否在控制台输出日志

    file 是否在log文件中记录日志

    level 用于记录日志的级别

    logpath 日志文件的记录路径

      logtype 日志文件的生产模式,1天,1周,1月,1年等

  六. 简单的测试案例

    这里简单的贴一段代码演示如何使用,后面具体详细描述:

DataCommand command = DataCommandManager.GetDataCommand("User.UpdateAllBase");
command.SetParameterValue(":username","");
command.SetParameterValue(":usergorup", "");
command.SetParameterValue(":userlevel", );
int line = command.ExecuteNonQuery();

    从以上代码可以看出,这里的使用已经比ADO.NET简单了很多,而且Command对象都是直接使用clone方式得到的,在操作的过程中没有连接,关闭等操作,只需要指定相应的参数即可。

    由于今日时间有限,文章比较粗鄙,就此完结,具体改进过程后面会一一详述.

Git.Framework 框架随手记--准备工作的更多相关文章

  1. Git.Framework 框架随手记--存储过程简化

    在很多的ORM中对存储过程操作都是一个棘手的地方,因为存储过程是一段预编译的代码,其中可以包含很多处理过程.在Git.Framework中也同样存在这样的问题,目前没有能力解决这个问题.但是对于存储过 ...

  2. Git.Framework 框架随手记--ORM条件组合

    在上一篇<Git.Framework 框架随手记--ORM新增操作>中简单记录了如何对数据进行删除和修改,其用法都非常简单,在文章中提到了Where()方法,本文将详述Where() 等条 ...

  3. Git.Framework 框架随手记--ORM编辑删除

    前面一篇文章<Git.Framework 框架随手记--ORM新增操作>主要讲解了如何使用Git.Framework往数据库中添加数据.其操作过程相对简单,本章主要记录如何编辑数据和修改数 ...

  4. Git.Framework 框架随手记--ORM项目工程

    前面已经简单介绍过了该框架(不一定是框架),本文开始重点记录其使用过程.可能记录的内容不是太详尽,框架也可能非常烂,但是里面的代码句句是实战项目所得.本文非教唆之类的文章,也非批判之类的文章,更不是炫 ...

  5. Git.Framework 框架随手记--SQL配置文件的使用

    前面几篇文章讲到了如何使用框架进行简单结构的增删改查操作,由于个人能力有限在对于复杂的SQL操作面前也是无能为力,只能自己动手来写SQL语句.在Git.Framework中提供了一个公共的接口来直接操 ...

  6. Git.Framework 框架随手记--ORM查询数据集合 二

    一.  分组查询 在SQL中使用Group By 来对数据分组,在实际中分组中一般与聚合函数一并使用.在Git.Framework中提供了相应的分组方法 DataTable Group(T entit ...

  7. Git.Framework 框架随手记--ORM新增操作

    本篇主要记录具体如何新增数据,废话不多说,开始进入正文. 一. 生成工程结构 上一篇已经说到了如何生成工程结构,这里在累述一次. 1. 新建项目总体结构 使用VS新建项目结构,分层结构可以随意.我们使 ...

  8. Git.Framework 框架随手记--历史原因

    Git.Framework 是近几年工作的一些工作经验总结,虽不能和某些知名的框架相提并论,但是还是比较实用的.此框架经过三年多的升级和维护,已经具有较强的实用性,在此记录该框架的使用操作方式,贡献给 ...

  9. Git.Framework 框架随手记-- 分享一个"比较垃圾"的项目

    本文主要分享一个Git.Framework 开发的一个项目的部分源码,此项目代码"比较垃圾",所以请各位码农,码畜,码神,码圣勿喷!发此文只为记录工作问题以及分享问题! 一. 项目 ...

随机推荐

  1. Redis高级应用

    上一篇博文讲述了Redis的一些常用命令,可以对数据库及数据库服务器进行操作,本篇将讲述Redis的高级应用及配置 安全性 设置密码:修改redis.conf中的requirepass,在其后面添加密 ...

  2. redis watch multi exec 关系

    EXEC 执行所有事务块内的命令. 假如某个(或某些) key 正处于 WATCH 命令的监视之下,且事务块中有和这个(或这些) key 相关的命令,那么EXEC 命令只在这个(或这些) key 没有 ...

  3. linux 打包压缩工具

    以.gz结尾 gzip 压缩工具压缩的文件gzip+文件名[root@test ~]# gzip 2.txt[root@test ~]# ls2.txt.gz testgzip -d +压缩包[roo ...

  4. SSIS ETL BEST PRACTICE

    PackageRunLog(ExecutionGuid,PackageName,SourceTableName,DestinationTableName,StartTimeUTC,EndTimeUTC ...

  5. 【转载】jQuery Validate验证框架 + CKEditor 无法验证问题的解决方法

    文章1:http://yangzhihuan.iteye.com/blog/717254 CKEDITOR.instances["page_content"].on("i ...

  6. POJ 2142 The Balance【扩展欧几里德】

    题意:有两种类型的砝码,每种的砝码质量a和b给你,现在要求称出质量为c的物品,要求a的数量x和b的数量y最小,以及x+y的值最小. 用扩展欧几里德求ax+by=c,求出ax+by=1的一组通解,求出当 ...

  7. Redis漏洞?阿里云被攻击!

    今天运维那边过来说阿里云服务器进程被占用很多,后来查了一下进程发现了这个玩意: 小编我看不懂,经运维先森仔细研究,发现这是被注入进来的一个进程,服务器被当成了肉鸡,专门用来跑比特币的,这样对方就不需要 ...

  8. Sprite Editor 图集切片精灵

    切图需求 假设有一张大的UI的图集,我们想把它里面的小图一张一张地切割出来,如果有plist文件,请查阅我的另一篇文章<还原TexturePacker plist 文件 切开各小图片> 今 ...

  9. Linux下php安装memcache扩展

    安装环境:CentOS 6.4 php扩展memcache的作用是为了支持memcached数据库缓存服务器,下面是安装方法. 1.下载 下载地址:http://pecl.php.net/packag ...

  10. Linux下如何知道文件被那个进程写

    http://blog.yufeng.info/archives/2581#more-2581