Сценарии, которые вы предоставили жестким кодом : BaseItem
для постоянного отображения. Это кажется сломанным.
Оригинальный код:
<#=Accessibility.ForType(entity)#> <#=code.SpaceAfter(code.AbstractOption(entity))#>partial class <#=code.Escape(entity)#><#=code.StringBefore(" : ", code.Escape(entity.BaseType))#>
Используется класс, определенный в:
C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ Extensions \ Microsoft \ Инструменты Entity Framework \ Templates \ Includes \ EF.Utility.CS.ttinclude
Части сценария между тегами <#= #>
являются просто выражениями C #, а строки, возвращаемые этими выражениями, вставляются в строку.
Метод code.Escape
вернет либо имя типа (в виде строки), либо пустую строку.
code.StringBefore
добавит первую строку (" : "
) перед второй строкой (именем базового типа), но только если вторая строка не пуста или не пуста.
Чтобы сделать то, что вы пытаетесь выполнить, вы можете использовать тот же трюк, который они используют, но в обратном порядке. К сожалению, вы не можете использовать их существующий класс, потому что у них нет какого-то AppendIfNotDefined
метода. Поэтому мы просто будем использовать более сложное выражение.
Вместо:
code.StringBefore(" : ", code.Escape(entity.BaseType))
Мы напишем:
code.StringBefore(" : ",
string.IsNullOrEmpty(code.Escape(entity.BaseType))
? "BaseItem"
: code.Escape(entity.BaseType)
)
Вот вся строка, все собрано вместе:
<#=Accessibility.ForType(entity)#> <#=code.SpaceAfter(code.AbstractOption(entity))#>partial class <#=code.Escape(entity)#><#=code.StringBefore(" : ", string.IsNullOrEmpty(code.Escape(entity.BaseType)) ? "BaseItem" : code.Escape(entity.BaseType))#>