本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html

Newlife XCode组件相关文章目录:http://www.cnblogs.com/asxinyu/p/4329747.html

  XCode让我一个外行业余者转变为一个半专业的开发人员,心怀感激,让我把更多的精力关注在业务,而不是数据库,存储过程,sql,以及编写一遍一遍的垃圾代码。在这里我不对Newlife XCode做过多介绍,XCode曾经是一个轻量级ORM组件,现在XCode加上XCoder,变成了一个非常强大的数据建模工具,支持实体对象数据到不同媒体的数据映射,提供面向对象的方式操作数据库,解决90%以上的数据库操作场景。X系列组件同样功能强大,以前写过很多篇关于XCode的文章,再打算写几篇总结,深入一点的,让大家更多更好的了解XCode的强大功能以及开发效率。

1.X组件资源汇总与入门文章

我的博客有一篇文章汇总了X组件(主要是XCode)的相关资源和文章:http://www.cnblogs.com/asxinyu/archive/2013/04/16/3023386.html

另外,我特别推荐JangoJing的几篇入门教程,是XCode学习入门的经典文章:

NewLife.XCode 上手指南(1)-基础介绍入门

NewLife.XCode 上手指南(2)-反向工程使用

NewLife.XCode 上手指南(3)-扩展属性使用

NewLife.XCode 上手指南(4)-级联操作

NewLife.XCode 上手指南(5)-复杂查询

2.初识XCoder:基本代码生成功能

XCoder是X组件入门的第一个工具,它的初衷是为XCode提供一个代码生成器,根据自定义的C#语法模版,来批量生成自定义的代码,如模型,业务操作,表单等等。只有学会了XCoder的代码生成才能顺利的使用XCode进行数据库操作。这只是一个工具,使用是非常简单的,但现在XCoder的功能越来越丰富,已经不仅仅是一个代码生成器了,而是一个越来越成熟的数据库建模工具。例如,数据库架构导入导出,新增数据库架构,链接其他类型的数据库,进行数据查询。那今天就逐一了解下这些功能。看看最新版的XCoder界面:

首先简单的给大家介绍一下,主界面上的东西,和用途,这样大家有一个初步的了解,使用就方便了。其实试一试很快就知道了,这里深入点讲解,可能一部分细节对你以后开发有用的。本文最上面的推荐入门文章,其实也很详细的介绍了用法。

1) 在初始启动,没有“连接”数据库时,菜单只有3个:“文件”,“添加模型”,“帮助”。菜单里面的东西都很直观,大家打开看就知道,都是一些细节,比如"Oracle客户端运行时检查","表名字段名命名规范"等等,最好是按照上面的细节要求来,这样兼容性和处理问题就最好。这里的“添加模型”是我去年12月份左右空闲的时候为XCoder增加的一个建模功能,还很粗糙,对简单的项目,可以直接用。目的是在没有任何数据库软件的情况下,进行数据库设计和开发。思想很简单,通过添加模型,生成XCoder指定的XML模型格式,然后利用模型来生成实体,最后在项目中通过“反向工程”来生成数据库;当然这里也可以通过直接导入XML模型来获取架构(第一次要先连接数据库,生成XML架构,以后才可以导入进行操作);

2) 关键的“连接”:这里的“连接”是指“数据库连接字符串”,它是在配置文件进行指定的,所以这里是下列列表,如果需要改动或者新增“连接”,需要打开配置文件。项目开发的时候,也是的,XCode会在默认的项目配置文件中进行查找字符串,是根据“连接名”来匹配查找的,在“实体”模型里面,会把生成实体的“连接名”记住,默认采用此名称;当然在开发的时候,是可以动态对 实体的 连接进行修改的,这个功能就是 “分库分表”的基础,因此在使用XCode的项目中,可以轻易的进行分库分表操作,而实体都是同一个。看看配置中“连接字符串”的格式,以及支持的数据库:

 <connectionStrings>
<add name="mssql" connectionString="Data Source=.;Initial Catalog=master;Integrated Security=True;" providerName="System.Data.SqlClient"/>
<add name="access" connectionString="Provider=Microsoft.Jet.OLEDB.4.0; Data Source=XCMS.mdb"/>
<add name="Oracle" connectionString="Data Source=orc;User ID=admin;Password=admin;DllPath=C:\OracleClient" providerName="System.Data.OracleClient"/>
<add name="Oracle2" connectionString="Data Source=(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.34)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = ORC)));User ID=admin;Password=admin;;DllPath=C:\OracleClient" providerName="System.Data.OracleClient"/>
<add name="sqlite" connectionString="Data Source=test.db;" providerName="Sqlite"/>
<add name="MySql" connectionString="Server=.;Port=3306;Database=master;Uid=root;Pwd=root;" providerName="MySql.Data.MySqlClient"/>
<add name="SqlCe" connectionString="Data Source=test.sdf;" providerName="SqlCe"/>
<add name="Firebird" connectionString="Server=.;Database=test.fdb;User=SYSDBA;Password=masterkey;" providerName="FirebirdSql.Data.FirebirdClient"/>
<add name="PostgreSQL" connectionString="Server=.;Database=master;Uid=root;Pwd=root;" providerName="PostgreSQL.Data.PostgreSQLClient"/>
</connectionStrings>

应该很简单,目前XCode已经不用任何扩展就支持上述7种数据库,当然通过接口,也可以支持你想要的数据库。注意,XCoder界面中下拉列表的集合就是这里字符串的"Name"属性集合。

3) 在配置文件中配置好“连接字符串”后,通过“连接”按钮,就可以实时的获取数据库架构了(当然配置文件要正确哦),这时在"数据库表"下来列表,可以看到指定的“连接字符串”所对应的数据库的所有表了(如果没有这里选择不能用或者没有表,可能是字符串配置有错误哦)。可以选择单个表进行生成,也可以选择所有表生成;当然之前要选择下面的“模版”,XCoder内置了8种模版,也可以自己编写模版,放在指定的目录就可以读取了,如下图所示的8种模版,一般的项目实体主要用“实体数据”,和“实体业务”2个模版,其他的模版其实也挺有用,只不过适用的地方不是特别广泛:

注意:如果想参考XCoder的模版语法和编写,可以查看内置模版,点击“释放内置模版”,就可以在XCoder的目录看到Template文件夹了,里面包含了所有的内置模版,自定义的模版也是放在这个文件夹里面的。

4) 选择好模版之后,下一步就是填写生成代码命名空间的相关信息,主要是:

命名空间:填写你计划中类库项目的命名空间;

连接名:这里一定要填写你项目中使用的“数据库连接字符串”的“Name”名称属性,可以和当前的XCoder中的名称不一样,当然最好是一样的,免得自己也搞糊涂了。

实体基类:一般就是Entity了,但有一个可选的“生成泛型实体类”,因为XCode里面大量的使用泛型基类,所以这里的泛型实体类在设计一些基础模型时是很有用的,如果是初次使用,在没有搞懂XCode的一些原理之前,还是不要勾选为好。

输出目录:这个就是生成的文件的保存位置,相对与当前目录,可以选择中文文件名,中文文件名称是根据表的备注来的;

扩展属性编辑器:这个功能是在我的提出下,大石头团队增加的功能,这个功能的目的是提供更多的可选参数,来丰富模版的开发。例如目前界面上的命名空间这些设置,如果有人自定义了很多信息,需要更多的设置项目,怎么办?那就可以在这里面动态添加进行,模版生成的时候,会在这里面进行寻找参数值。

5) 其他的也没什么了,主界面也就这点元素,只要连接字符串配置正确,都很好办。右小角是动态获取的论坛文章列表信息。有兴趣的可以多去论坛看看,那里有很多资源,包括问题和答案,还有大家喜欢的源代码。

3.活用XCoder:模型与架构管理

3.1 导出模型

  在主界面上,顺利连接数据库,获取到架构信息后,可以通过“导出模型”按钮,将数据库的架构信息保存到XML文件中。这样做的好处就是,以后每次修改数据库就不需要使用原始的数据库管理软件了,直接使用XCoder提供的架构管理就可以进行代码生成或者架构更新等操作。同样,在上一节中,也提到了也可以直接通过“导入模型”来获取架构信息,就是这个意思,下面看看导出XML的例子,就是保存了数据表的各种原始信息,如下XML代码,是开源的DTCMS的数据库中的一个表的导出信息格式,太多无法一一列出:

 <?xml version="1.0" encoding="utf-8"?>
<Tables Version="8.9.4841.25349">
<Table Name="dt_amount_log" Description="充值日志" DbType="SqlServer">
<Columns>
<Column Name="id" DataType="Int32" Identity="True" PrimaryKey="True" Description="自增ID" />
<Column Name="user_id" DataType="Int32" Description="用户ID" />
<Column Name="user_name" DataType="String" Length="100" Description="用户名" />
<Column Name="type" DataType="String" Description="类型" />
<Column Name="order_no" DataType="String" Length="100" Description="订单号" />
<Column Name="payment_id" DataType="Int32" Default="0" Description="支付方式" />
<Column Name="value" DataType="Decimal" RawType="decimal" Length="9" NumOfByte="5" Precision="9" Scale="2" Default="0" Description="增减值" />
<Column Name="remark" DataType="String" Length="500" Description="备注说明" />
<Column Name="status" DataType="SByte" Length="3" Precision="3" Default="0" Description="状态0" />
<Column Name="add_time" DataType="DateTime" Default="getdate()" Description="生成时间" />
<Column Name="complete_time" DataType="DateTime" Description="完成时间" />
</Columns>
<Indexes>
<Index Name="PK_DT_AMOUNT_LOG" Unique="True" PrimaryKey="True" Columns="id" />
</Indexes>
</Table>
</Tables>

天天和数据库打交到的朋友,应该很清楚的很容易理解,每个表的名称,描述,以及原始的数据库类型,列名的信息,长度等等,以及索引的信息,都包括了。这些信息是代码生成器的基础,同时也是XCode操作的基础。

3.2 数据库架构管理

在导入模型或者连接数据库后,菜单会出现“模型”项,有几个子项目,第一个子菜单就是“数据架构管理”,点击进去之后,界面如下:

如上图突出部分显示,可以选择查看“当前数据库连接”下的数据库中的各个“表”的架构信息,同时还可以进行编辑修改,当然也可以直接选择其他“连接字符串”;同时,也可以获取建表的Sql语句等功能;也可以动态添加好字段和索引功能;可以说,可以完全抛弃其他数据库管理工具,直接使用XCoder来完成数据库建模的任务。当然可能某些功能需要完善,当这个小巧的东东如此强大,也许可以大大减轻我们的工作量和关注的事情。而且修改的模型保存为XML后,对所支持的数据库是通用的。

3.3 查询分析器

这是XCoder强大的亮点之一,同样是基于“连接字符串”,当XCoder连接上数据库后,就可以通过使用查询分析器,编写sql语句进行查询。为什么强大?也许你懂了,各种数据库都可以在这里查询,这意味这什么,意味着那些庞大的数据库管理软件貌似都不需要了。曾经我电脑上没有查看access和sqlite的软件,后来想到了XCoder的这个功能,马上拿来用,非常好使。看看截图:

也就是说通过配置文件,所有XCoder支持的数据库都可以在这里通过sql语句进行查询。这对开发带来的影响也许很小,但对个人习惯来说,确实一大步,毕竟再好的电脑,性能也有限,软件越少越好,越精简越好。

4.XCoder模版的介绍

  XCoder核心其实就是XCode和XTemplate,上面介绍的以及实际开发用到的基本都是XCode,而模版引擎XTemplate这个强悍的工具,不得不在这里说一说。我的博客曾经有一篇文章里面详细讲到过模版引擎的语法:

1、模板是完全使用C#作为模版语言,把<##>标签外的文本内容当作字符串原样输出,而把<##>标签内作为C#代码执行,因此很容易理解。
2、模板引擎中获取的数据值,传入的Data是一个字典集合,可以根据名称访问,任何获取变量值都要用 <#=  #>,例如<#= Data["NameSpace"]#>,获取字典中key为NameSpace的值,用来作为命名空间。<#= #>同样可以用来获取在模板中定义的的变量值。
3、模板中变量的定义是在<# #>里面定义的,不要=号,定义的时候可以使用<#=#>来替代部分值。如
< # string title = <#=Data["Title"]#>Name#>,这里组合一个字符串,可以在下面调用<#=Title#>
3.另外模板中需要的循环等都要在<# #>里面,其他所有在<# #>都会原样输出。
4.可以看到整个模板中就是这2个东西<##>和<#= #>,他们是关键,虽然没什么难度,但出错了,的确比较麻烦,很难改,当然模板引擎有调试功能,当然多写多改,就经验就好办了。下面来分析一段简单的模板,就是字段定义的,根据Data是一个键值对集合,来生成字段定义,键值对中Key是字段名称,value是字段类型。Data集合中还有2个其他的字段,不能包括在里面,那就是NameSpace和ClassName,所以生成字段的时候要把这2个排除在外,所以下面的循环中有一个判断。

还是看一个很简单的XCoder内置的模版例子,这个例子是根据数据库表来生成“实体的属性”:

 using System;
using System.Collections.Generic;
using System.ComponentModel; namespace <#=Config.NameSpace#>
{
/// <summary><#=Table.Description#></summary>
[Serializable]
[DataObject]
[Description("<#=(""+Table.Description).Replace("\\", "\\\\")#>")]
public partial class <#=Table.Name#>
{
#region 属性<#
foreach(IDataColumn Field in Table.Columns)
{#>
private <#=Field.DataType.Name#> _<#=Field.Name#>;
/// <summary><#=Field.Description#></summary>
[DisplayName("<#=Field.DisplayName#>")]
[Description("<#=(""+Field.Description).Replace("\\", "\\\\")#>")]
[DataObjectField(<#=Field.PrimaryKey.ToString().ToLower()#>, <#=Field.Identity.ToString().ToLower()#>, <#=Field.Nullable.ToString().ToLower()#>, <#=Field.Length#>)]
public <#=Field.DataType.Name#> <#=Field.Name#> { get { return _<#=Field.Name#>; } set { _<#=Field.Name#> = value; } }
<# }#>
#endregion
}
}

对照上面的语法,和这段模版,好好讲解一下:

1) 开头的命名空间引用都是原样输出,因为它不在任何的<##>之间;写什么就输出什么

2) 这里的<#=Config.NameSpace#>其实就是获取XCoder界面上的设置:命名空间,包括界面上讲到的扩展属性编辑器,其实就是把键值对放在Config.Items里面,这里就是从Config里面获取界面上输入的信息。<#=XXX#>其实就是获取值进行填充了;

3) <#foreach(IDataColumn Field in Table.Columns){#> 这里的<#  #>是循环语句,也就是说对Table表所有的字段进行遍历,循环进行的操作在括号里面;

4) 其实要点就这么几条,其他的语法都是C#语法,所有模版引擎的编写是非常简单的,模版里面的Table类就是数据库表的架构信息,需要注意的就是括号的匹配,如果不小心括号搞错了,调试还是有些麻烦的。

5.资源下载

顺便发一个最新版本的XCoder,有兴趣的就研究下哦,用它打造一个自己的代码生成器太简单了。

XCoder V5.1http://www.kuaipan.cn/file/id_4279479643944128.htm

【原创】探索Newlife X组件利器之:XCoder点滴[附下载]的更多相关文章

  1. ASP CDONTS.NEWMAIL组件发送电邮(附下载)

    附CDONT.NEWMAIL组件下载地址:http://files.cnblogs.com/files/colinliu/cdonts.rar ASP常规发送方法: <% dim mail se ...

  2. 【目录】Newlife XCode组件相关文章目录

    本博客所有文章分类的总目录链接:本博客博文总目录-实时更新  1.Newlife XCode组件相关文章目录  1.Newlife XCode组件资源目录汇总[2013年版]    2.Newlife ...

  3. .NET Core开源组件:后台任务利器之Hangfire 转载 https://www.cnblogs.com/chenug/p/6655636.html

    .NET Core开源组件:后台任务利器之Hangfire   一.简述 Hangfire作为一款高人气且容易上手的分布式后台执行服务,支持多种数据库.在.net core的环境中,由Core自带的D ...

  4. 【总结】探索Newlife组件:服务代理利器XAgent的前世今生

         本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html Newlife XCode组件相关文章目录:http://www.cn ...

  5. 【原创】Newlife.XCode的常见功能使用(一)查询与数据初始化

            本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html Newlife XCode组件相关文章目录:http://www ...

  6. 后台任务利器之Hangfire

    后台任务利器之Hangfire 一.简述 Hangfire作为一款高人气且容易上手的分布式后台执行服务,支持多种数据库.在.net core的环境中,由Core自带的DI管理着生命周期,免去了在NF4 ...

  7. Android开发利器之ActivityTracker

    版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/113 Android开发利器之ActivityTracke ...

  8. Win下必备利器之Cmder

    诚言,对于开发码字者,Mac和Linux果断要比Windows更贴心;但只要折腾下,Windows下也是有不少利器的.之前就有在Windows下效率必备软件一文中对此做了下记载:其虽没oh-my-zs ...

  9. C#编程利器之二:结构与枚举(Structure and enumeration)【转】

    C#编程利器之二:结构与枚举(Structure and enumeration) 在上一篇文章中,介绍了类如何封装程序中的对象.而实际中,出了类可以封装对象外,结构和枚举也可以封装一些对象,本文将着 ...

随机推荐

  1. maven清除不同版本的重复依赖

    pom文件加入: <dependencyManagement> <dependencies> <dependency> <groupId>org.spr ...

  2. Happy Programming Contest(ZOJ3703)(01背包+路径储存)

    Happy Programming Contest  ZOJ3703 老实说:题目意思没看懂...(希望路过的大神指点) 最后那个the total penalty time是什么意思啊!!! 还是学 ...

  3. python if

    根据用户从控制如输入数据,使用if语句实现用户登录功能 代码如下: name = "zy"password = "123"_name = input(" ...

  4. Linux下安装mysql数据库

    l 检查是否已安装mysql的相关包 [root@localhost ~]# rpm -qa|grep -i mysql MySQL-server-5.6.19-1.el6.x86_64 MySQL- ...

  5. Worse Is Better

    最近做的几件事和最近刚读到这篇文章(http://www.jwz.org/doc/worse-is-better.html)让我重新认识了KISS和这个所谓的Worse-is-better原则. 软件 ...

  6. xml笔记

    <?xml version="1.0" encoding="UTF-8"?> ----------------------------------- ...

  7. PAT/进制转换习题集

    B1022. D进制的A+B (20) Description: 输入两个非负10进制整数A和B(<=230-1),输出A+B的D (1 < D <= 10)进制数. Input: ...

  8. WindowsPhone技术和XNA技术

    介于公司目前还没有涉及WP(WindowsPhone)项目的开发,而我本身是学习WP开发的,因此在这里稍微入门的介绍一点WP的知识. 一.简介 Windows Phone具有桌面定制.图标拖拽.滑动控 ...

  9. .NET跨平台实践:用C#开发Linux守护进程(转)

    Linux守护进程(Daemon)是Linux的后台服务进程,它脱离了与控制终端的关联,直接由Linux init进程管理其生命周期,即使你关闭了控制台,daemon也能在后台正常工作. 一句话,为L ...

  10. Javascript事件模型系列(一)事件及事件的三种模型

    一.开篇 在学习javascript之初,就在网上看过不少介绍javascript事件的文章,毕竟是js基础中的基础,文章零零散散有不少,但遗憾的是没有看到比较全面的系列文章.犹记得去年这个时候,参加 ...