正如上篇文章所说,一般仓储模式,每张表都至少有4个类。仓储接口、实现类,服务接口实现类。假设你有N张表,如果凭借手动新建,那可真是离腱鞘炎不远了……
其实好早之前就知道这个东西,也见过网上很多开源的代码生成器,如果觉得麻烦,懒得自己做,其实可以跳过这篇文章了。在网上找一个自己配置下就行了,这玩意儿说难不难,说简单也不是很简单,可能会涉及一些偏向底层的接口什么的,当然啦,你如果使用一些工具,插件或者开源的代码生成器,那就不需要担心了,可能稍微配置一下就好了,我没有去研究过那些开源的,所以我就不多说什么了,可以自己去找一下。
我使用的是微软的T4模板。毕竟这是个Net项目嘛,而且相对来说C#代码还是容易看得懂的,只是一些比较冷门,比较偏底层的接口实在是难搞,微软文档太难找了……
在这个项目开始之前我压根不会代码生成,我不想最后写着写着搞得很麻烦,所以熬夜学了几天,可能理论上的细节上的我目前没法给你将的很明白。我在搜罗相关博客的时候发现关于T4模板的都很早了(集中在12年-16年),没怎么细看,因为一眼看过去和官方文档差不多,所以最好的老师还是官方文档。
先丢一个创建.tt文件的默认内容:
<#@ template debug="false" hostspecific="false" language="C#" #> <#@ assembly name="System.Core" #> <#@ import namespace="System.Linq" #> <#@ import namespace="System.Text" #> <#@ import namespace="System.Collections.Generic" #> <#@ output extension=".txt" #>
简单先说一下T4模板里的两种不同模板:一种是文本模板(TextTemplatingFileGenerator),一种是运行时模板(TextTemplatingFilePreprocessor)。
用到的是文本模板,运行时模板我没怎么看,写法也差不多,但文本模板已经够用了,我也害怕太久不更新我自己就懈怠了,忘记了,所以这几天熬夜都到四五点…我哭死……
你在vs新建项的时候搜索模板,就会搜索到对应的文件类型了。他们的文件名扩展为 .tt
还有一个扩展名为 .ttinclude的一种文件。这个你新建一个txt就行,修改后缀名就得了,好像没法直接添加。官方话语太官方,我当时没怎么理解,现在写博客的时候算是温故而知新吧。那我的理解就很简单了,这种类型的文件是作为包含文件在.tt文件中使用的。就相当于你写代码,调用其他类里的方法一样。
写法大概是:
假设我有这么一个文件 text.ttinclude。
在.tt文件中包含此文件:ProjectDir相当于模板所在的根路径,模板文件里特用的(大概是,我也是第一次在这里使用)
<#@ include file="$(ProjectDir)GeneratingClass.ttinclude"#>
按照顺序来说
<#@ import namespace="System.IO" #> <#@ include file="$(ProjectDir)DbHelper.ttinclude"#>
到这里,基础的玩意儿都已经讲差不多了,T4模板写起来语法没什么,就是没有格式化,没有智能提示,甚至没有颜色区分。完全可以当成txt来看待。我是使用了两个插件,所以我截图里面有颜色,不然我真的搞不下去,能看瞎……
回头俺这个要是关注人多了,可以来录视频讲解下。
虽然这篇文章好像啥也没写吧,其实主要是代码部分,他不是.cs文件那种,层次分明的,连个折叠都没有,我有点难搞,so~你们直接来看代码好了,我会上传git,我写的还可以吧hhhh,我尽量按照标准的代码格式去写了,不至于睁眼瞎~找个少的给你们大致看眼代码(截图,因为上传代码块会错位很多,理解起来效果不好,可以去git来下载,顺便点个关注star)
还是上次建好的项目,现在他是啥也没有:
然后我启动代码生成功能,得到的效果如下:根据数据库表结构已经全部自动生成完毕
打开会提示找不到类型,这里的话我打算通过Sqlsugar生成,目前还没生成表实体,所以找不到这个表,正常。重点在于代码生成!成功完成!
今天能早点睡吗…别再失眠了… 结束,掰掰……