最近做的基本上都是做小网站,实在无聊,所以还是决定用这种小项目去踩踩坑,大概看了看,很多必须要用到的框架还是支持的,所以从这个项目开始,打算用.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 _@item.ColumnName;
}
@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 _@item.ColumnName; }
@:set
@:{
@:this._@item.ColumnName = value;
@:}
@:}
}
#endregion
}
}