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"
我向这个枚举添加了一些成员:
- 我的会员
- 我的会员
- MyMemberThree
错误地,我检查了 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)
,但实际错误并不那么容易发现。
我有一个 Model.edmx 文件,我向其中添加了自定义枚举类型(通过 "convert to enum" 或 "Add enum type")。我们称这个枚举为 "MyEnum"
我向这个枚举添加了一些成员:
- 我的会员
- 我的会员
- MyMemberThree
错误地,我检查了 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)
,但实际错误并不那么容易发现。