# Victory.CodeGenerator **Repository Path**: Amano5/Victory.CodeGenerator ## Basic Information - **Project Name**: Victory.CodeGenerator - **Description**: No description available - **Primary Language**: C# - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-08-20 - **Last Updated**: 2024-08-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ![img](https://img2020.cnblogs.com/blog/161176/202007/161176-20200717213331969-1091439631.png) ### 数据库支持
数据库是否支持
Oracle支持
Sqlserver支持
MySql支持
Sqlite暂不支持
### 怎么写模板 所有的代码生成器,一个基本的原则都是 **关键字替换**, 但是有了引擎的加持,我们就可以 使用 编程语言,比如 for,if 这些。 我贴一个最简单 的model 实体生成 的模板代码: [![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0);) ``` using System; using System.Linq; using System.Text; using SqlSugar; namespace @ViewBag.NameSpace { /// /// @Model.Comment /// public class @Model.Name { public @(Model.Name)() { } @foreach (var item in @Model.Columns) { @:/// @:///描述:@(item.Comment) @:/// @:public @item.PrimativeTypeName @item.CaseCamelName { get; set; } } } } ``` [![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0);) 简单的说一下,这里面的替换的内容都是哪来的,比如: ``` @ViewBag.NameSpace viewBag,就不多说了,熟悉asp.net mvc 的朋友都知道,一般在控制写写ViewBig ,前端就可以获取的到,这里也一样 ViewBag ,是我在执行代码生成 之前加的: ``` ![img](https://img2020.cnblogs.com/blog/161176/202007/161176-20200717214825152-1863895973.png) 上面看到,我在viewbag里面 还加了一个时间,不过我模板里面没有用到,一般有些人会加自己的 名字,联系方式什么的, 都可以通过viewbag 去加。 至于其他的内容则来自数据库,比如字段信息,表名,主外键,等等。。 大体来说分成两个部分,一个是表信息,一个是字段信息, 如下: 这是表信息: [![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0);) ``` public interface ITableSchema { /// /// 表名 /// string Name { get; set; } /// /// 表备注 /// string Comment { get; set; } /// /// 列名 /// List Columns { get; set; } /// /// 外键集合 /// List ForiegnKeys { get; set; } /// /// 唯一键集合 /// List UniqueKeys { get; set; } /// /// 主键 /// PrimaryKey PrimaryKey { get; set; } /// /// 对象类型,TABLE or VIEW /// string ObjectType { get; set; } /// /// 视图脚本 /// string ViewScript { get; set; } } ``` [![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0);) 我们就可以在模板里面取这些信息,比如: ``` @Model.Name 表名 @Model.Comment 表备注 其他的以此类推,至于为什么是Model点出来的,因为是把整个对象扔进去了,对象在Razor里面就是Model这个变量。 字段信息,就很好理解了,就在 List Columns { get; set; } 里面,遍历它就可以了 ``` [![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0);) ``` using System; using System.Collections.Generic; using System.Text; namespace SugarWinner.CodeGenerator.Facade.Interfaces { /// /// 数据列接口 /// public interface IColumn { /// /// 列名 /// string Name { get; set; } /// /// 列数据长度 /// int Length { get; set; } /// /// 列精度 /// int Scale { get; set; } /// /// 数据库类型【char,number...等等】 /// string DbType { get; set; } /// /// 数据库类型转换为Csharp类型 /// Type CsharpType { get; set; } /// /// 转换为基元类型 /// string PrimativeTypeName { get; set; } /// /// 列默认值 /// string DefaultValue { get; set; } /// /// 列描述 /// string Comment { get; set; } /// /// 是否可空 /// bool IsNullable { get; set; } /// /// 是否为数字类型 /// bool IsNumeric { get; set; } /// /// 是否自动增长 /// bool IsAutoIncrement { get; set; } /// /// 列所属表 /// ITableSchema Table { get; set; } /// /// 驼峰命名 /// string CaseCamelName { get; set; } } } ``` [![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0);) 关于一些代码生成器Oracle 全大写,生成出来的字段就全大写了,所以我这里特地加了驼峰命名法,解决了Oracle 数据库的问题。 ### 特别鸣谢:Jason