Model.tt T4 在没有设置外部类型时不会生成自定义枚举文件

Model.tt T4 does not generate custom enum files while they have no External Type set

我有一个 Model.edmx 文件,我向其中添加了自定义枚举类型(通过 "convert to enum" 或 "Add enum type")。我们称这个枚举为 "MyEnum"

我向这个枚举添加了一些成员:

错误地,我检查了 Reference external type 并将其设置为某些东西,比如 MyExternalEnum,然后保存 edmx。

然后我意识到这不是我想要的,所以我编辑枚举(右键单击 > 编辑)并取消选中 Reference external type,单击 OK并再次保存。

当我执行自动生成的Model.tt(右击>运行自定义工具)时,我希望创建一个文件MyEnum.cs

不是这样的

仔细检查 Reference external type 是否未检查,但没有结果。

为什么?发生了什么事?

我在 xml 文本编辑器中查看了 Model.edmx,发现 MyEnum 的编码如下:

    <EnumType Name="MyEnum" a:ExternalTypeName="" xmlns:a="http://schemas.microsoft.com/ado/2006/04/codegeneration" >
      <Member Name="MyMemberOne" />
      <Member Name="MyMemberTwo" />
      <Member Name="MyMemberThree" />
    </EnumType>

这个 应该 没问题,因为 ExternalTypeName 是空的,但由于某些原因 Model.tt T4 文件生成器将空字符串视为实际值,防止枚举代码生成发生。 从 EnumType 标记中删除 a:ExternalTypeName="" xmlns:a="http://schemas.microsoft.com/ado/2006/04/codegeneration" 并保存允许 Model.tt 正确生成文件 MyEnum.cs。

    <EnumType Name="MyEnum"> <!-- This is ok -->
      <Member Name="MyMemberOne" />
      <Member Name="MyMemberTwo" />
      <Member Name="MyMemberThree" />
    </EnumType>

我在 Model.tt 中没有看到任何关于为什么存在这种行为的暗示,也没有看到它是否有意(但我非常怀疑...)。

我预计某处会有 if (ExternalTypeName != null) //Do not generate file,而不是 if (ExternalTypeName != null && ExternalTypeName != String.Empty),但实际错误并不那么容易发现。