С шаблонами T4, это дает вам базу данных как объект, где вы можете выплевывать код? - PullRequest
1 голос
/ 30 ноября 2009

Имеет ли шаблон T4 базу данных в качестве объекта, в котором вы можете выплевывать код?

или вам нужен этот инструмент visualt4?

Ответы [ 2 ]

3 голосов
/ 30 ноября 2009

Хотя в самом T4 нет ничего специально для доступа к метаданным базы данных, вы можете использовать любые существующие .NET API. В частности, если вам нужно работать только с SQL Server, вы можете использовать SMO (http://msdn.microsoft.com/en-us/library/ms162169.aspx),, который очень хорошо разработан и прост в использовании. Вот пример: http://www.olegsych.com/2008/09/t4-tutorial-creatating-your-first-code-generator/.

Олег

1 голос
/ 11 декабря 2009

Думайте о T4 как о файле ASPX с кодом сервера. HTML визуализируется напрямую, и все <% %> блоки кода выполняются и оцениваются во время выполнения.

Тот же подход здесь. Весь код, который находится внутри блоков <# #>, выполняется, когда шаблонизатор T4 выполняет шаблон. Внутри этого блока вы можете делать все, что умеет фреймворк. При желании вы можете открывать соединения с базой данных, читать данные и генерировать из них код (так же, как если бы вы подключались к базе данных и генерировали HTML из табличных данных в файле ASPX).

Так что вы можете сделать это (после того, как у вас уже есть читатель БД):

...
public enum UserTypeFromDBLookupTable
{
    <# while(reader.Read()) { #>
    /// <summary><#= reader.Get("Description") #></summary>
    <#= reader.Get("Name") #> = <#= reader.Get("UserTypeID") #>,

    <# } #>
}
...

и он выведет перечисление для вас на основе данных в некоторой таблице поиска (*). Вы можете видеть, что это довольно мощный и гибкий инструмент, так как вы можете делать все, что вам нравится и что вам нравится.

комментарий (*)
Пример кода не работает напрямую, потому что он упрощен, чтобы показать вам, как все работает. Например, я пропустил код, который должен был бы удалить последнюю запятую

...