代码生成器 (Sergen)

Sergen 有一些额外的配置选项,你可以通过解决方案目录下的配置文件(Serenity.CodeGenerator.config)设置。

这是所有的配置选项:

  1. public class GeneratorConfig
  2. {
  3. public List<Connection> Connections { get; set; }
  4. public string KDiff3Path { get; set; }
  5. public string TFPath { get; set; }
  6. public string TSCPath { get; set; }
  7. public bool TFSIntegration { get; set; }
  8. public string WebProjectFile { get; set; }
  9. public string ScriptProjectFile { get; set; }
  10. public string RootNamespace { get; set; }
  11. public List<BaseRowClass> BaseRowClasses { get; set; }
  12. public List<string> RemoveForeignFields { get; set; }
  13. public bool GenerateSSImports { get; set; }
  14. public bool GenerateTSTypings { get; set; }
  15. public bool GenerateTSCode { get; set; }
  16. }

Connections、RootNamespace、WebProjectFile、ScriptProjectFile、GenerateSSImports、GenerateSSTypings 和 GenerateTSCode 都可在用户界面中设置,所以我们将重点放在其他配置选项。

KDiff3 路径

Sergen 在有需要时会尝试启动 KDiff3 把更改合并到现有文件。这也会发生在当再次尝试为实体生成代码时,Sergen 将执行 KDiff3,而不是重写目标文件。

Sergen 在其默认路径 C:\Program Files\Kdiff3 查找 KDiff3,但是如果你把 Kdiff3 安装在其它位置,可以使用该配置选项重写这个路径。

TFSIntegration 和 TFPath

对于使用 TFS 的用户,Sergen 提供此配置选项让其可以检出现有文件及添加新项目到源代码控制。如果你的项目是在 TFS,则把 TFSIntegration 设置为 true ;如果 tf.exe 不在其默认位置 C:\Program Files\Visual Studio\x.y\Common7\ide\,则设置 TFPath。

  1. {
  2. // ...
  3. "TFSIntegration": true,
  4. "TFPath": "C:\Program Files\....\tf.exe"
  5. }

RemoveForeignFields

默认情况下,Sergen 会检查表的外键,并生成一个含所有外键表字段的行类。

有时,你可能有一些外键表字段,例如一些像 InsertUserId、UpdateDate 等对另一行没有用的日志字段。

你也可以在生成代码后手动删除它们,但使用此配置选项可能更容易,因为只需在字符串数组中列出想要在生成行中删除的字段即可:

  1. {
  2. // ...
  3. "RemoveForeignFields": ["InsertUserId", "UpdateUserId",
  4. "InsertDate", "UpdateDate"]
  5. }

请注意,这并不会从表的行类删除这些字段,它只从外键联接中删除这些视图字段。

BaseRowClasses

如果你使用一些基行类(base row class),例如,类似 Serene 中的 LoggingRow 类。你可能想让 Sergen 生成继承自这些基行类(base row class)的类。

若要实现此目标,需要列出基类和其字段。

  1. {
  2. // ...
  3. "BaseRowClasses": [{
  4. "ClassName": "Serene.Administration.LoggingRow",
  5. "Fields": ["InsertUserId", "UpdateUserId",
  6. "InsertDate", "UpdateDate"]
  7. }]
  8. }

如果 Sergen 确定表已经有数组 “Fields” 列出的所有字段,它将把 “ClassName” 设置为基类,而并不会在行中显式生成这些字段,因为它们已经在基行类(base row class)中定义。

也可以定义多个基行类(base row class)。如果行字段匹配多个基类,Sergen 将选择匹配字段最多的基行类。