1

我在我的代码块中动态创建类和变量名例如:

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

对于名为 Site 的实体模型,这会生成:

 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();
<#} #>

随后为名为 Site 的实体模型生成的代码如下所示:

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

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

想法?

4

1 回答 1

0

如果类型在您正在构建的程序集中,您可以使用

<#@ assembly name="$(TargetPath)"#>

我在代码优先的 View Gen T4 模板中使用了这个技巧

于 2012-10-17T05:27:06.357 回答