数据模型与代码生成

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

整个系列教程会大量结合示例代码和运行日志来进行深入分析,蕴含多年开发经验于其中。

XCode代码生成的最佳实践是xcodetool.exe+Model.xml,码神工具仍可生成实体类代码,但缺乏维护可能有兼容问题。熟练开发者可使用dotnettoolinstallxcodetool-g安装工具,并使用全局命令xcode+Model.xml来生成代码。

数据模型文件是XCode数据库开发的中心,曾经流行和支持的DBFirst和EntityFirst,经过10多年优胜劣汰,只剩下ModelFirst。

XCode的数据模型文件就是一个Model.xml,(名字可变),同目录配套xcodetool.exe,用于生成基于xml模型文件的多个实体类文件。

核心用法,编辑模型文件model.xml后,双击运行同目录的xcodetool.exe即可根据model.xml生成多个实体类文件!

如果手头没有model.xml,在空白目录运行xcodetool.exe会自动生成一个例子文件。

该工具也可以在XCode源码中编译XCodeTool发布得到。

xcodetool工具随着XCode发布最新版,可通过dotnettool来安装。新建build.bat批处理文件,写入以下代码:

@echooffxcodeIFERRORLEVEL1(echoxcode命令执行失败,正在安装.NET工具...dotnettoolinstallxcodetool-g--prereleasexcode)双击运行build.bat,相同目录和子目录的*.xml模型文件将会自动生成实体类代码文件。如果找不到xml模型文件,则自动输出Model.xml文件作为模板。

(注:2022年开始,以下build.tt用法已过时,不推荐使用)

XCode的数据模型文件就是一个Model.xml,(名字可变),同目录配套Build.tt,用于在vs里调用XCode生成基于xml模型文件的多个实体类文件。

核心用法,在build.tt文件上点击右键选择“运行自定义工具”,即可根据model.xml生成多个实体类文件!

从nuget安装NewLife.XCode时,可以看到项目下多了一个Model.xml和build.tt/build_netcore.tt

nfx项目安装NewLife.XCode才有,netcore项目可从nfx项目中拷贝这两个文件,或者修改项目为netcore+net45混合项目后再安装引用。

(!!!安装XCode后,编译一次项目,确保输出目录中存在newlife.core.dll和xcode.dll,因为build.tt内需要引用这两个文件,也可以拷贝这两个文件到别处并修改build.tt内部引用)

解压拷贝model.xml和build.tt(netcore项目选build_netcore.tt)到需要放置实体类的目标目录。

*.tt文件本质上就是VisualStudio的T4模版,可以在vs中新建一个,并确保其文件属性中的自定义工具为TextTemplatingFileGenerator。

build.tt和model.xml的文件名都可以随意修改,build.tt默认会自动查找当前目录的第一个xml文件来使用。或者修改build.tt文件内容,强制指定文件名

<#@templatelanguage="C#"hostSpecific="true"debug="true"#><#@assemblyname="netstandard"#><#@assemblyname="$(SolutionDir)\DLL\NewLife.Core.dll"#><#@assemblyname="$(SolutionDir)\DLL\XCode.dll"#><#@importnamespace="System.Diagnostics"#><#@importnamespace="System.IO"#><#@importnamespace="XCode.Code"#><#@outputextension=".log"#><#//设置当前工作目录PathHelper.BasePath=Host.ResolvePath(".");//导入模型文件并生成实体类,模型文件、输出目录、命名空间、连接名、中文文件名、表名字段名大小写//EntityBuilder.Build(StringxmlFile=null,Stringoutput=null,StringnameSpace=null,StringconnName=null,BooleanchineseFileName=true,BooleannameIgnoreCase=null);EntityBuilder.Build();//vartables=DAL.ImportFrom("Company.Project.xml");//EntityBuilder.Build(tables);#>在.NETCore3.1/.NET5.0项目使用XCode的build_netcore.tt模板生成时,可能会报以下错误(未能找到文件):

或者报以下错误(正在编译转换:类型"Object"在未引用的程序集中定义。必须添加对程序集的引用):

这是VisualStudio2019的T4模板存在对.NET5.0程序集的兼容问题,只需要强制指定DLL引用位置即可。

上面文件中指定使用解决方案下DLL子目录的NewLife.Core.dll和XCode.dll,需要首先编译任意引用了XCode的项目,并在输出目录中寻找这两个文件,拷贝到DLL子目录中去。

此外,还可以修改EntityBuilder.Build参数来满足个性化需求。

在.NETCore3.1/.NET5.0项目使用XCode的build.tt模板生成时,会报错:

此时我们可以修改模板

安装后启动,菜单中选择“数据建模工具”,会自动列出本机安装的数据库。

(也可以修改配置文件XCoder.exe.config,加入开发数据库的连接信息)

选择并连接数据库,可以看到该库的所有表信息,此时只需要“导出模型”,即可得到该库的model.xml模型文件。

(码神工具在早期2002~2012是XCode的唯一代码生成方式,现在仍可以使用,但由于缺乏维护可能存在一些兼容问题,推荐使用最新的build.tt+model.xml)

Model.xml正是供我们进行数据建模的参考,同时也是XCode内部Membership的模型文件。

头部属性解释:

Tables中的这些属性对本模型文件所有Table有效,各个Table上也可以指定这些属性,以覆盖全局设置

Table.Name就是生成的实体类类名,如果实际表名不同,可用TableName指定表名。

Column.Name就是生成的实体类属性名,如果实际字段名不同,可用ColumnName指定字段名。

字符串长度Length默认50,不建议小于50,-1表示最大ntext

其它字段不建议设置长度,特别不建议给Double和Decimal设置精度

字段Column只需要DataType指定.Net类型即可,反向工程会根据使用数据库的不同而映射到不同数据库类型。

如果不喜欢XCode推荐的数据库类型,可在Column中通过RawType指定原始数据库类型。

Column支持Type指定枚举类型,建议是带命名空间的全名。例如上面User表中Sex类型的字段就是枚举SexKinds

Indexes内放置该表所有索引。

每一行Index为一组索引,Columns内指定索引所需要的字段(注意先后顺序),Unique指定是否唯一索引。

!!XCode反向工程支持自动创建或删除索引。

可以通过码神工具/建模工具,从数据库中导出数据表对应的模型文件;

也可以编码通过DAL.Export导出模型文件;

魔方的系统管理数据库页面,也可以导出模型文件;

模型文件的Table名将会生成实体类类名,Column字段名将会生成实体类属性名,因此命名规范很重要。

模型文件设计要求开发者有一点数据库基础,至少要能明确表、字段和索引的概念。

然而要求又远比数据库要低得多,因为咱们推崇极致简单的原则。

类型

数据库类型

推荐

备注

Int32

整数

int

强烈

优先

String

字符串

nvarchar(50)

默认变长50

DateTime

datetime

Boolean

布尔型

bit

MySql中建议tinyint替代枚举来实现布尔型

Int64

长整型

long

有可能超过21亿的整数,选长整型

Decimal

十进制

money

慎用

高精度货币型时采用

Double

双精度

double

特别慎用,避免浮点运算导致精度丢失

Int16

short

禁用

由Int32替代

Byte

tinyint

Single

single

由Double替代

为了便于开发,XCode默认优待以下字段:

IP组CreateIP/UpdateIP字段对应IPModule,在Web新增或更新时自动赋值;

用户组CreateUser(ID)/UpdateUser(ID)字段对应UserModule,在Web新增或更新时字段赋值;

一句话:用了这些字段,在Insert时自动给CreateAbc赋值,在Update时自动给UpdateAbc赋值!

THE END
1.特殊网名制作软件大全网名app下载网名生成器特殊网名制作软件大全能生成带有特殊符号昵称的软件,比如竖立网名、稀有漂亮符号、麒麟符号、昵称中间一横等特殊符号,非常独特好看,一键即可生成你想要的特殊符号昵称,网名生成器、特殊网名制作、网名大全等软件让你在众多不同的社交网络平台上都是非常适用的,大家可以生成自己专属的网名,结合创意和符号等等,可以让你的文字http://www.downyi.com/key/wangmingzhizuoruanjian/
2.名字随机生成器——让你快速取名在生活中,取名是一项非常重要的任务,名字的好坏将会对你的生活产生很大的影响。但是取好名字并不是一件容易的事情,有的人会花费很长时间才能想出一个满意的名字。为了解决这一问题,今天我们就来介绍一种名字生成器——名字随机生成器。 名字随机生成器是一款非常实用的工具,可以帮助你快速生成适合你的名字。该工具https://www.bamuwu.com/details/2064
3.在线八字易经宝宝取名源码带源码数据(网页+APP+小程序)自然语言处理技术:如分词、词性标注、命名实体识别等,这些技术可以用于名字寓意的解析和生成。 开发工具 开发工具用于辅助开发过程,提高开发效率。在起名源码中,常用的开发工具包括: 版本控制系统:如Git等,用于代码的版本管理和协作开发。 IDE(集成开发环境):如Visual Studio Code、PyCharm等,这些IDE提供了代码编辑、调https://blog.csdn.net/rongtinghua/article/details/144259476
4.在线签名生成器免费,rpa,机器人,自动化艺术签名设计免费版在线生成艺术签名在线生成器2024年9月9日?·?艺术签名在线生成器使用非常方便,只需输入你的名字并选择款式就可以一键生成了,完全免费,不限制次数,你可以完全自由发挥. 最高支持四个字的中文名字设计,如果是 更多内容请查看http://www.kachayv.cn/https://www.wdlinux.cn/html/email/20241211/23845.html
5.[社区]制作一个简单的随机姓名(内附一键粘贴)·GameCreatorGame.player.variable.setString(14002,生成.first() ); 复制 显示全部 复制 之后我们设置一下字符串,让全名=姓+名 点击事件就做完了,你的随机姓名也会存进去 什么你问我确认是干嘛的,那个是关闭界面 咱来运行一下 成功了 如果你想姓和名字分开roll,那就做两个按钮,然后把上面的内容复制对应部分,其实很好分https://www.gamecreator.com.cn/forum/det/3850
6.创作猫全国重名查询,详细教程,简单制作,日入多张创作猫的基础功能:去水印、智能配音、老照片修复等,想必大家都有耳闻。 但是却很少有人知道创作猫还有强大的变现板块:涵盖了小说推文、短剧推广、小程序测试等多种内容。 我之前给侄女取名在网上找灵感,刷视频的时候发现一个全国重名查询的小程序,今天就拆解这个项目的玩法 http://www.hmly8.com/?p=59819
7.创作猫全国重名查询,详细教程,简单制作,日入多张创富道场【vip1188.cn】项目课程资源网:创作猫全国重名查询,详细教程,简单制作,日入多张【揭秘】 创作猫的基础功能:去水印、智能配音、老照片修复等,想必大家都有耳闻。 但是却很少有人知道创作猫还有强大的变现板块:涵盖了小说推文、短剧推广、小程序测试等多种内容。 我之前给侄女取名在网上找灵感,刷视频的时候发https://vip1188.cn/35347.html
8.创作猫全国重名查询,详细教程,简单制作,日入多张创作猫的基础功能:去水印、智能配音、老照片修复等,想必大家都有耳闻。 但是却很少有人知道创作猫还有强大的变现板块:涵盖了小说推文、短剧推广、小程序测试等多种内容。 我之前给侄女取名在网上找灵感,刷视频的时候发现一个全国重名查询的小程序,今天就拆解这个项目的玩法 https://www.midou55.com/79767.html
9.花草名称生成器生成字体分类发现字体简介: 花草名称生成器 Shitzu&Porko_PersonalUseOnly 语言:英文 下载 Novelin Black Italic 语言:英文 下载 SherilynSANS 语言:英文 下载 Liber Grotesque Family Thin 语言:英文 下载 Vicanza 语言:英文 下载 PrincessCards 语言:英文 下载 HumbleNostalgia-Italic 语言:英文 下载 FSP DEMO - Octin Prisonhttp://www.qiuziti.com/fontlist2?id=1041628
10.英文名字在线生成在线生成SDK代码华为云帮助中心为你分享云计算行业信息,包含产品介绍、用户指南、开发指南、最佳实践和常见问题等文档,方便快速查找定位问题与能力成长,并提供相关资料和解决方案。本页面关键词:英文名字在线生成。https://support.huaweicloud.com/topic/212170-1-Y
11.姓名代码在线转换器理想股票技术论坛姓名代码在线转换器是一款方便快捷的工具,能够将中文姓名转换成对应的名称代码或代码转换为中文姓名。使用该转换器可以帮助用户快速查询和查找相应的姓名代码,方便实现个人信息录入、数据处理等操作。无论是需要进行批量转换还是单个转换,该转换器都能够满足用户的需求,https://www.55188.com/tag-3650810.html
12.芋道框架万字详解(前后端分离)若依框架yudao可以看出来芋道开发框架是非常全能的,我也用这个框架开发了三个项目所使用的技术栈后端为SpringCloud,前端使用的是Vue3,数据库主要用的两个,MySQL和postgre,主要使用的是他的代码生成功能,在此需要注意的是芋道开发框架目前只支持MySQL的建表插入语句,其余数据库需要另做更改,我一会会去介绍postgre的使用方式。 https://developer.aliyun.com/article/1576332
13.全网首发,4万字Instagram从0到1流量变现实操手册Instagram名字源自于Instamatic,是柯达从1963年开始销售的一个相机的系列名。 公司位于旧金山,由Kevin Systrom动态会展示你在Instagram上登录过的网址链接和你的在线时长。 2.4 成效分析 Insights Aa该功能以文字形式展现,系统为你生成一张贺卡、动图,以用户互动为目的。 系统会给你推荐背景模板,点击https://www.360doc.cn/article/74163855_1125552299.html
14.微信透明昵称设置,空白名字代码生成教程手机堂1、在公众号手机堂后台回复数字5或者“空白昵称”,会得到一个空白的代码符号 。 2、长按复制空白昵称代码。 3、打开微信进入-我-点击自己头像,进入资料设置页面,把空白符号粘贴到名字一栏,然后点击保存就可以了。 返回对话框打开自己头像刷新一下资料,看看是不是变成空白了,这样就搞定了。 https://www.163.com/dy/article/HD0BIE310511K7NK.html
15.抖音空白昵称()(抖音空白昵称代码复制)只需要输入关键词,就能返回你想要的内容,有小程序、在线网页版、PC客户端和批量生成器 官网:https://ai.de1919.com。 本文目录: 抖音名叫空白昵称什么意思 抖音个人简介怎么空白 抖音空白昵称代码复制 抖音名叫空白昵称什么意思 抖音昵称为空说明这个人是用手机登陆上的抖音,上去之后一直没有给自己在抖音上起https://www.de1919.com/article/580456.html
16.微信昵称怎么设置空白微信空白名字代码接亲网微信昵称怎么设置空白 微信空白名字代码 微信,一款即时跨平台通讯工具,可支持单人,多人在线,给大家提供了不少的便利。里面的功能繁多,可供大家选择也是经常要使用到的东西。但是想必大家也晓得,在每一个社交平台上都会有像现实世界中的名片一样的东西—网名或昵称,有了它,相当于有个代号,最起码别人晓得你是谁,那么https://www.jieqinwang.com/baike/52282.html
17.空白代码复制微信名字游戏3、点击“安卓转换”,之后点击“复制”,返回微信“发现”界面,点击右下角“我”,点击“个人头像”,点击“昵称”,删除原来的昵称,长按复制后,点击右上角“保存”即可。 二、微信空白名字代码 之一步、复制特殊符号,不是一般的空白格式 ,直接打空格是没有用的必须用下面的符号,大家可以直接复制:() https://www.taofang114.com/post/17806.html
18.id单字生成器(单字id转换器)游戏问答一个字的ID其实不值钱id单字生成器,因为可以添加【空白代码】这种字符id单字生成器,比如id单字生成器你打算取“帅”这一个字的名字,取名格式就是【空白字符+帅+空白字符】这样,只要不和别人取过的空白字符格式重复,就能成功修改。 第一种为利用游戏BUG;如之前的改名卡BUG,可以输入空格字符。第二种为利用系统识别https://www.fkw8.com/ask/4990.html
19.空白符号,空白名字制作,空白代码复制,王者荣耀CF吃鸡空白名字生成器王者荣耀空白符号,空白代码,空白网名,王者荣耀空白名字,王者空白名,王者空白名怎么打,空白名字复制,王者荣耀CF吃鸡空白名字生成器http://kongbai.teshufuhao.cn/
20.考生姓名代码在线查询昌1893 猖1894 场1901 尝1902 常1903 长1904 偿1905 肠1906 厂1907 敞1908 畅1909 唱1910 倡1911查询员工表显示员工名字、编号、工资,查询结果以名字为序升序排列 2.查询员工表显示员工名字、编号、CAD图案代码查询 免费文档中心 免费文档中心可免积分在线阅读和下载文档 ?免费文档 ?高等教育 ?高中教育https://m.360docs.net/doc/a113248378.html
21.WordPress引用阿里巴巴矢量图标库添加彩色图标第三步:跳转到我的项目页面(没有跳转的点击–>资源管理–>我的项目)//我的项目自己创建名字 第四步:在我的项目页面有一下按钮—>一般选Symbol 第五步:点击 –>查看在线链接(没有的的话可以点击生成链接) —>点此复制代码(代码例如下面) 代码语言:javascript https://cloud.tencent.com/developer/article/2335425
22.cf空白名字制作生成软件下载散人CF空白名代码生成器v1.0免费绿色版由恋伤制作的cf散人空白名称生成器可以随机生成15000千种不同空白呢称,如生成空白名已被使用,您可以点击重新生成空白名按钮或选择自动生成空白名,知道更改名字成功为止,在自动模式下,将每隔10秒钟自动更换一次空白名并复制至剪切板。 代码生成器空白名CF散人 https://www.jb51.net/game/704145.html
23.在线姓名自动生成器注:长宽可以调整。 在自定义姓氏里输入你的姓氏,N多名字任你选~ 代码:<EMBED height=430 type=application/x-shockwave-flash pluginspage=http://www.macromedia.com/go/getflashplayer width=700 src=http://sm./fl/qiming.swf wmode="transparent" invokeurls="false" quality="high" allowScriptAccess="nevehttp://www.360doc.com/content/12/1007/15/6085160_240040489.shtml