使用t4模板在运行时生成内存中的SQL



我们正在构建一个查询服务,它需要解析用户的搜索词,并从中生成一种SQL形式(不是T-SQL,而是一种专有的类似SQL的查询语言)。为了生成SQL,我们正在查看T4模板。

我在运行时(构建时)创建T4模板时查看了另一个问题,我理解基本思想;然而,我们需要的是不是物理文件输出,而是一个包含最终SQL语句的简单内存字符串。这可能吗?

我有第二个问题,这几乎更重要:当考虑到我们需要在T4模板文件中生成SQL的相当复杂的逻辑时,这个T4的东西有多快。谢谢。

我认为你想看看预处理模板(又名运行时模板)。您可以在visual studio 2010中使用模板预处理文本模板创建它们。

我创建了这个非常简单的模板(我把它命名为MyTemplate.tt):

<#@ template language="C#"#>
<#
    for (var iter = 0; iter < HowManyCommentsToGenerate; ++iter)
    {
#>
    // <#=iter#>
<#
    }
#>

我添加了这个部分类,它扩展了HowManyCommentsToGenerate字段生成的类:

partial class MyTemplate
{
    int HowManyCommentsToGenerate;
    public MyTemplate (int count)
    {
        HowManyCommentsToGenerate = count;
    }
}

最后我这样使用它(注意输出是字符串而不是文件):

class Program
{
    static void Main(string[] args)
    {
        var str = new MyTemplate(32);
        Console.Write(str.TransformText());
    }
}

就性能而言,老实说我没有足够的运行时模板经验来建议您。我建议阅读生成的代码并对其进行分析。

最新更新