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)"#>

Code Firstの View Gen T4 テンプレートでこのトリックを使用しました

于 2012-10-17T05:27:06.357 に答える