我有一个修改后的T4模板,它可以从我的edmx构建类,除了派生类外,它的工作流畅。如何在声明中有条件地设置基类
Product : BaseItem // works fine as do all top level classes
TranslatedProduct : Product : BaseItem // dang
我很困惑如何以及在哪里可以有条件地设置T4模板忽视:BaseItem在派生类中的情况下 - 即
TranslatedProduct : Product
例如:
<#=Accessibility.ForType(entity)#> <#=code.SpaceAfter(code.AbstractOption(entity))#>partial class <#=code.Escape(entity)#><#=code.StringBefore(" : ", code.Escape(entity.BaseType))#> : BaseItem
在我的脑海中,我想像它 -
if(code.Escape(entity.BaseType).Equals(string.empty)
{
<#=Accessibility.ForType(entity)#> <#=code.SpaceAfter(code.AbstractOption(entity))#>partial class <#=code.Escape(entity)#> : BaseItem
}
else
{
<#=Accessibility.ForType(entity)#> <#=code.SpaceAfter(code.AbstractOption(entity))#>partial class <#=code.Escape(entity)#><#=code.StringBefore(" : ", code.Escape(entity.BaseType))#>
}
但我收到语法错误,所以我想看看是否有其他人试过这个,如果我在正确的道路上
感谢您的答复 - 这很好,但什么我以后是默认行为。即。使所有类继承BaseItem,除非它是派生类。这行代码是T4的默认行为。 – MikeW
让我进一步澄清 - 这个默认的BaseClass不是模型的一部分 - 因为它看起来与T4生成的类非常不同。因此,虽然可能不是最好的解决方案,但它是一个简单的解决方法 – MikeW
@MikeW:因此,位于'<#= #>'标记之间的T4模板部件是简单的C#表达式。你知道什么'entity.BaseType'评估为顶级类型?例如,它是否为空? –