diff --git a/vuepress-starter/docs/shengchengqi.md b/vuepress-starter/docs/shengchengqi.md
index ad563674c474502cf64dad85947961e114389a61..aaabd49b52bd523bd487a7e5167bad71e4499863 100644
--- a/vuepress-starter/docs/shengchengqi.md
+++ b/vuepress-starter/docs/shengchengqi.md
@@ -1,26 +1,37 @@
# 代码生成器
## 库表管理
+
库表管理页面是直接映射数据库的。
+
+`CodeFirst`:代码优先;开发者先编写代码(领域模型的类),由代码实体生成数据库表。对应的有 `DbFirst`,与之相反。
+
也就是说
-``` csharp
+
+```csharp
库表管理==数据库 ??后台Entity
```
+

我们以建立一个简单的题库为例。
-新建了`App_TiKu`表,并添加了`LeiXing`(类型)、`TiGan`(题干)、`TiMu`(题目)、`DaAn`(答案)字段。点击保存后,数据库会同步创建表。
+新建了 `App_TiKu`表,并添加了 `LeiXing`(类型)、`TiGan`(题干)、`TiMu`(题目)、`DaAn`(答案)字段。点击保存后,数据库会同步创建表。
+
### 生成实体按钮
-`生成实体`按钮,会生成`App_TiKu`对应的`TiKu`类,放在`Application/Entity`目录下。我们选择实体类型为`基础实体`。
-这时候后端会生成`TiKu`类,如果我们把现有的表删除,在`tiKu.cs`中添加`[IncreTable]`标记,这时重启服务,数据库会重新创建表,并且带有了表的继承特性。`EntityBase`
-具体的`[IncreTable]`标记,请看[配置文件 - IncreTable标记说明](./peizhiwenjian.md#incretable标记说明)。
+`生成实体`按钮,会生成 `App_TiKu`对应的 `TiKu`类,放在 `Application/Entity`目录下。我们选择实体类型为 `基础实体`。
+这时候后端会生成 `TiKu`类,如果我们把现有的表删除,在 `tiKu.cs`中添加 `[IncreTable]`标记,这时重启服务,数据库会重新创建表,并且带有了表的继承特性。`EntityBase`
-> 所以综上:在Entity文件夹中直接创建类并且添加`[IncreTable]`标记,效率更快,尤其是有AI帮手,会比网页新增效率高。
+具体的 `[IncreTable]`标记,请看[配置文件 - IncreTable 标记说明](./peizhiwenjian.md#incretable标记说明)。
+
+> 所以综上:在 Entity 文件夹中直接创建类并且添加 `[IncreTable]`标记,效率更快,尤其是有 AI 帮手,会比网页新增效率高。
### 同步机制
+
下面,我们对同步机制做一些测试性验证。
-#### 实验1:在前端页面生成表之后,重新初始化表
-``` csharp
+
+#### 实验 1:在前端页面生成表之后,重新初始化表
+
+```csharp
在前端页面生成表,只生成基础字段,不生成ID和`EntityBase`扩展。
在entity文件上增加`[IncreTable]`标记
配置文件配置为 TT;FF
@@ -28,11 +39,16 @@
数据库会重新创建表,并且带有了表的继承特性。
比如:CreateTime、DeleteTime、IsDeleted等
```
->结论:全新的表,系统会初始化表的继承特性。
-#### 实验2:生成按钮会不会覆盖实体文件
->结论:会
-#### 实验3:有数据的表会不会被覆盖?
-``` csharp
+
+> 结论:全新的表,系统会初始化表的继承特性。
+
+#### 实验 2:生成按钮会不会覆盖实体文件
+
+> 结论:会
+
+#### 实验 3:有数据的表会不会被覆盖?
+
+```csharp
在前端页面生成表,只生成基础字段,不生成ID和`EntityBase`扩展。
手动在数据库中输入数据
在entity文件上增加`[IncreTable]`标记
@@ -41,12 +57,16 @@
数据库会重新update表,表的数据不会丢失,增加了ID、`EntityBase`扩展。
比如:CreateTime、DeleteTime、IsDeleted等
```
->结论:会修复表,但是旧数据还在。
+
+> 结论:会修复表,但是旧数据还在。
## 手动生成
-我们已经知道了,库表管理就是给entity文件夹下面新增了一个文件,格式完全按照`SqlSugar`来的,所以手动写可能更快。
+
+我们已经知道了,库表管理就是给 entity 文件夹下面新增了一个文件,格式完全按照 `SqlSugar`来的,所以手动写可能更快。
+
### 代码生成器的标准格式
-``` csharp
+
+```csharp
///
/// TiKu业务表
///
@@ -55,75 +75,81 @@
public class TiKu : EntityBase
{
///
- ///
+ ///
///
[Required]
[SugarColumn(ColumnName = "TiGan", ColumnDescription = "题干", Length = 64)]
public string TiGan { get; set; }
-
+
///
- ///
+ ///
///
[SugarColumn(ColumnName = "XuanXiang", ColumnDescription = "选项", Length = 64)]
public string? XuanXiang { get; set; }
-
+
///
- ///
+ ///
///
[Required]
[SugarColumn(ColumnName = "DaAn", ColumnDescription = "答案", Length = 64)]
public string DaAn { get; set; }
-
+
///
- ///
+ ///
///
[Required]
[SugarColumn(ColumnName = "LeiXing", ColumnDescription = "类型", Length = 64)]
public string LeiXing { get; set; }
-
+
}
```
### 自己写一个简版
+
那我们自己写一个简单版的岂不是更快?
-看一下sqlsugar的原版要求: [sqlsugar建模官网文档](https://www.donet5.com/Home/Doc?typeId=1182)
-``` csharp
+看一下 sqlsugar 的原版要求: [sqlsugar 建模官网文档](https://www.donet5.com/Home/Doc?typeId=1182)
+
+```csharp
[SugarTable("APP_TiKu2")]
[IncreTable]
public class TiKu2 : EntityBase
{
///
- ///
+ ///
///
+ //Required .NET特性 含义是必填;sqlsugar解析为数据库的not null
//这个`Required`是干嘛的?以后研究,暂且保留
[Required]
public string TiGan { get; set; }
-
+
///
- ///
+ ///
///
public string? XuanXiang { get; set; }
-
+
///
- ///
+ ///
///
[Required]
public string DaAn { get; set; }
-
+
///
- ///
+ ///
///
[Required]
public string LeiXing { get; set; }
-
+
}
```
->结论1:也生成了。
+> 结论 1:也生成了。
->结论2:啥也不写,默认255 varchar
+> 结论 2:啥也不写,默认 255 varchar
->结论3:string?就不生效了。
+> 结论 3:string?就不生效了。
+>
+> 因为 string 是引用类型,默认情况下就是可为空

-### 代码生成功能
\ No newline at end of file
+
+### 代码生成功能