我有一个Model.edmx文件,我添加了一个自定义枚举类型(通过"转换为枚举"或"添加枚举类型")。让我们称之为枚举" MyEnum"
我在这个枚举中添加了一些成员:
错误地,我检查Reference external type
并将其设置为某个内容,让我们说MyExternalEnum,并保存edmx。
然后我意识到这不是我想要的,所以我编辑枚举(右键单击>编辑)并取消选中Reference external type
,点击OK
然后重新保存。< / EM>
当我执行自动生成的Model.tt(右键单击&gt;运行自定义工具)时,我希望创建一个文件MyEnum.cs
。
情况并非如此
仔细检查是否取消选中Reference external type
不会产生任何结果。
为什么?什么是hapenning?
答案 0 :(得分:0)
我在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)
,但实际的错误并不容易发现。