0

У меня есть файл Model.edmx, к которому я добавил пользовательский тип Enum (будь то через «convert to enum» или «Add enum type»). Давайте назовем это перечисление "MyEnum"Model.tt T4 не создает пользовательские файлы перечисления, в то время как у них нет внешнего набора типов

Я добавить к этому перечисление некоторые члены:

  • MyMemberOne
  • MyMemberTwo
  • MyMemberThree

Mistakingly, я проверить Reference external type и установить его что-то, скажем, MyExternalEnum, и сохраните edmx.

Тогда я понимаю, что это не то, что я хочу, так что я изменить перечисление (Щелчок правой кнопкой мыши> Изменить) и снимите Reference external type, нажмите OK и сохранить снова.

При выполнении автоматически созданного Model.tt (щелкните правой кнопкой мыши> Запустить настраиваемый инструмент), я ожидаю, что будет создан файл MyEnum.cs.

Это не так

двойной проверки, чтобы увидеть, если Reference external type не uncheked дает никакого результата.

Почему? Что такое hapenning?

ответ

0

Я выглянул Model.edmx в текстовом редакторе XML, и увидел 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 обрабатывает пустую строку как реальное значение, предотвращая генерацию кода enum. Удаление a:ExternalTypeName="" xmlns:a="http://schemas.microsoft.com/ado/2006/04/codegeneration" из тега EnumType и сохранение позволяют 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), но фактическая ошибка не так-то просто заметить.

 Смежные вопросы

  • Нет связанных вопросов^_^