# 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

### 数据库支持
| 数据库 | 是否支持 |
| Oracle | 支持 |
| Sqlserver | 支持 |
| MySql | 支持 |
| Sqlite | 暂不支持 |
### 怎么写模板
所有的代码生成器,一个基本的原则都是 **关键字替换**, 但是有了引擎的加持,我们就可以 使用 编程语言,比如 for,if 这些。
我贴一个最简单 的model 实体生成 的模板代码:
[](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; }
}
}
}
```
[](javascript:void(0);)
简单的说一下,这里面的替换的内容都是哪来的,比如:
```
@ViewBag.NameSpace
viewBag,就不多说了,熟悉asp.net mvc 的朋友都知道,一般在控制写写ViewBig ,前端就可以获取的到,这里也一样
ViewBag ,是我在执行代码生成 之前加的:
```

上面看到,我在viewbag里面 还加了一个时间,不过我模板里面没有用到,一般有些人会加自己的 名字,联系方式什么的,
都可以通过viewbag 去加。
至于其他的内容则来自数据库,比如字段信息,表名,主外键,等等。。
大体来说分成两个部分,一个是表信息,一个是字段信息, 如下:
这是表信息:
[](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; }
}
```
[](javascript:void(0);)
我们就可以在模板里面取这些信息,比如:
```
@Model.Name 表名
@Model.Comment 表备注
其他的以此类推,至于为什么是Model点出来的,因为是把整个对象扔进去了,对象在Razor里面就是Model这个变量。
字段信息,就很好理解了,就在 List Columns { get; set; } 里面,遍历它就可以了
```
[](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; }
}
}
```
[](javascript:void(0);)
关于一些代码生成器Oracle 全大写,生成出来的字段就全大写了,所以我这里特地加了驼峰命名法,解决了Oracle 数据库的问题。
### 特别鸣谢:Jason