最近做的基本上都是做小网站,实在无聊,所以还是决定用这种小项目去踩踩坑,大概看了看,很多必须要用到的框架还是支持的,所以从这个项目开始,打算用.NET CORE 做,首先要解决的就是ORM上的问题。EF先不考虑,以前用了一段时间的EF,实在觉得难受,还是喜欢轻量级的东西。以前一直用DOS.ORM 感觉很顺手,可惜一直没出.NET CORE的版本,尝试多次之后,决定用Chloe.ORM
对于Chloe.ORM,这玩意是没实体生成器的,看了看群上,要么自己写,要么是用动软或其他软件生成,动软这东西实在太老了,试了下有问题,肯定果断放弃这东西了。然后用T4模板试下了,还是有问题,放弃。正当我有点焦灼的时候,突然想到DOS.ORM-TOOL 这东西是开源的,最开始是想稍微修改下源码,支持Chloe.ORM的实体生成就行了,没想到这东西已经完美支持模板生成了。实在开心,于是乎就有下面这么简单的模板去生成整个数据库的实体,这东西很强,简单无BUG,实在是好东西
dos.orm-tool GitHub地址:https://github.com/itdos/Dos.Tool
下载后在Template文件夹下建立一个chloe_mysql.tpl 然后把下面的代码复制进去,保存,在运行exe连接数据库,模板选择chloe_mysql.tpl 即可生成全部实体
后来发现没[NonAutoIncrementAttribute]这个标识好像有问题。。。无语,所以仔细看了看这个工具是可以加[AutoIncrementAttribute]和[NonAutoIncrementAttribute]这两个标识的
using System; using Chloe.Entity; namespace @Model.NameSpace { /// <summary> /// 实体类@(Model.ClassName)。(属性说明自动提取数据库字段的描述信息) /// </summary> [TableAttribute("@Model.TableName")] [Serializable] public partial class @Model.ClassName { #region Model @foreach(var item in Model.Columns) { @:private @item.TypeName [email protected]; } @foreach(var item in Model.Columns) { @:/// <summary> @:/// @(item.DeText) @:/// </summary> if(item.IsPK){ @:[ColumnAttribute(IsPrimaryKey = true)] if(Model.IdentityColumn != null&&item.ColumnName==Model.IdentityColumn.ColumnName) { @:[AutoIncrementAttribute] } else{ @:[NonAutoIncrementAttribute] } } @:public @item.TypeName @item.ColumnName @:{ @:get{ return [email protected]; } @:set @:{ @:[email protected] = value; @:} @:} } #endregion } }