Использование шаблонов t4 для генерации SQL в памяти во время выполнения - PullRequest
3 голосов
/ 20 сентября 2011

Мы создаем службу запросов, которая должна анализировать поисковый запрос пользователя и генерировать из него форму SQL (не T-SQL, а собственный SQL-подобный язык запросов).Чтобы сгенерировать SQL, мы рассматриваем шаблоны T4.

Я рассмотрел еще один вопрос здесь: Создание шаблонов T4 во время выполнения (время сборки) , и я понимаю основную идею;однако нам нужно не вывод физического файла , а простая строка в памяти, содержащая окончательный оператор SQL.Возможно ли это?

Второй вопрос, который у меня есть, который почти важнее: насколько быстрым является этот материал T4, учитывая довольно сложную логику, необходимую для генерации SQL внутри файла шаблона T4.Спасибо.

1 Ответ

2 голосов
/ 20 сентября 2011

То, что я думаю, вы хотите взглянуть на предварительно обработанные шаблоны (или шаблоны времени выполнения). Вы создаете их в Visual Studio 2010 с помощью шаблона Preprocess Text Template.

Я создал этот очень простой шаблон (я назвал его 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());
    }
}

Что касается производительности, мне, честно говоря, не хватает опыта работы с шаблонами времени выполнения, чтобы посоветовать вам это. Я рекомендую прочитать сгенерированный код и профилировать его.

...