[NewLife.XCode]反向工程(自动建表建库大杀器)

NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netstandard,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode

整个系列教程会大量结合示例代码和运行日志来进行深入分析,蕴含多年开发经验于其中,代表作有百亿级大数据实时计算项目。

开源地址:https://github.com/NewLifeX/X (求star, 656+)

 

大杀器

反向工程是XCode的大杀器,区别于其它ORM的最强功能!

通俗理解:基于XCode开发的应用,无需数据库安装脚本,连接字符串指向哪一台哪一种数据库,系统就自动在上面建库建表!

正式定义:基于实体类的表结构信息,在连接字符串指定的目标数据库上自动执行建库建表、添删改字段、创建索引等操作,支持各种数据库!

应用系统首次启动完成的时候,也是自动建表建库并初始化完成的时候。

反向工程是XCode数万级分表的主要倚仗!

 

创建控制台项目,从Nuget引用NewLife.XCode

创建实体类,模型如下(可参考前面几章来生成实体类):

[NewLife.XCode]反向工程(自动建表建库大杀器)

 测试代码:

[NewLife.XCode]反向工程(自动建表建库大杀器)

 执行日志:

[NewLife.XCode]反向工程(自动建表建库大杀器)

自始至终,我们没有编写SQL脚本,没有去数据库创建数据表。

代码写完就跑起来,测试通过就部署到正式库。

从日志来看,程序自动下载SQLite驱动,因为我们并没有指定实体类使用哪一种数据库,XCode自动给我们配置了SQLite。(上一章连接字符串部分有讲解)

 

加一行代码把数据库指向MySql:

[NewLife.XCode]反向工程(自动建表建库大杀器)

 执行日志:

[NewLife.XCode]反向工程(自动建表建库大杀器)

同样的首先下载MySql驱动,(当然也可以自己通过nuget引用)。

首次连接数据库时,库名指定School报错,因为根本就不存在这个库。

因此,XCode切换到系统库,开始创建数据库School,并创建数据表和索引。这里完全是MySql语法,不同于上面的SQLite建表语句。

 

感兴趣的同学,还可以试试Oracle和SqlServer等数据库。

 

正向工程

正向工程就是从数据库读取表结构信息,生成模型信息。

我们来试试写几行代码读取上面创建的数据表:

[NewLife.XCode]反向工程(自动建表建库大杀器)

执行日志:

[NewLife.XCode]反向工程(自动建表建库大杀器)

从上面可以看到,读取dal.Tables得到了这个连接的所有表结构信息,输出为Xml时,跟前面用来创建实体类的模型文件极为相似。

其实这就是一个模型文件,只是为了生成实体类的模型文件多增加了几个属性而已。

新生命码神工具XCoder,(https://github.com/NewLifeX/XCoder),其中的数据建模工具,可以导出各种数据库的表结构信息,正是基于dal.Tables来实现。

 

正向工程由3个基本接口构成:

IDataTable。数据表接口,dal.Tables就是IDataTable集合,包括名称、描述等

IDataColumn。数据列接口,每张数据表有多个数据列,包括名称、类型、长度、描述等

IDataIndex。数据索引接口,每张数据表没有或者有多个索引,索引指定包括哪些字段 ,是否唯一

 

反向工程

有了IDataTable,我们就可以主动控制数据表结构。

DAL.SetTables(IDataTable[] tables);

这是反向工程高级用法,实际日常工作中用不到,各个实体类加载时,将会逐个连接进行反向工程检查,正是调用该方法。

 

给上面的数据模型,增加一个字段Code和对应索引:

[NewLife.XCode]反向工程(自动建表建库大杀器)

跑起来:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyydyy.html