2012-09-13 179 views
1

我动态创建类和变量名,我的代码块中。例如:如何从嵌套模板块中生成T4模板中的代码块?

if (new<#=et.Name#> == null) 

一个实体模型命名的网站,这会产生:

if (newSite == null) 

但我想要做的是评估项目的类型,然后根据该类型生成代码。对于我的特定目的,我想编写一段代码,根据该实体的键值的数据类型即时创建新的主键。所以,我想要做这样的事情在我的模板:

<#if (new<#=et.Name#>.<#=primaryKey.Name#>.GetType() == typeof(Guid)) {#> 
    if (new<#=et.Name#>.<#=primaryKey.Name#> == Guid.Empty) 
     new<#=et.Name#>.<#=primaryKey.Name#> = Guid.NewGuid(); 
<#} #> 

名为网站的实体模型,随后生成的代码应该是这样的:

if (newSite.SiteKey == Guid.Empty) 
    newSite.SiteKey = Guid.NewGuid(); 

这在逻辑上看起来好像它会工作。但是,我一直无法找到正确的语法来嵌套模板块,并对这些值进行评估,然后将其置于条件内。注意嵌套在语句块中的表达式块。因此,上面的代码生成示例不起作用,因为Visual Studio抱怨语法的各种问题。

想法?

+0

这是不大可能奏效使用这一招。原因之一是模板可用的类型不一定适用于生成的代码,反之亦然。更好的是,如果你模型化对象并暴露像IsPrimaryKey这样的模板,然后在模板中进行测试。意图也更清楚。 – FuleSnabel

回答