T4

T4: Acessando o banco de dados

0

Templates T4 são largamente usados para acessar o banco de dados e gerar código de acordo com os objetos(tabelas e etc). Vamos ver como podemos acessar o SQLServer usando templates tt.Antes de ver o código precisamos baixar ums dlls

1-Importar os assemblies

   1: <#@ assembly name="Microsoft.SqlServer.ConnectionInfo" #>

   2: <#@ assembly name="Microsoft.SqlServer.Smo" #>

   3: <#@ assembly name="Microsoft.SqlServer.Management.Sdk.Sfc" #>

   4: <#@ assembly name="Microsoft.SqlServer.SqlEnum" #>

   5: <#@ import namespace="System.IO" #>

   6: <#@ import namespace="Microsoft.SqlServer.Management.Smo" #>

2-Estabelecer a conexão

   1: <#

   2:     Server server = new Server("NomeDaMaquina\\NomeDaInstancia");

   3:     Database database = new Database(server, "NomeDoDatabase");

   4:     database.Refresh();

   5: #>

3- Gerando uma classe para cada tabela do banco

   1: <#

   2:     foreach (Microsoft.SqlServer.Management.Smo.Table item in database.Tables)

   3:     {

   4: #>

   5:     public class <#=item.Name#>{}

   6:     <# SaveOutput(item.Name+".cs");

   7:     }

   8: #>

4- Usamos um método SaveOutput que está em outro tt que foi incluido no início do arquivo

   1: <#@ include file="SaveOutput.tt" #>

5- Código do SaveOutput.tt

   1: <#@ template language="C#" hostspecific="true" #>

   2: <#@ import namespace="System.IO" #>

   3: <#+

   4:   void SaveOutput(string outputFileName)

   5:   {

   6:       string templateDirectory = Path.GetDirectoryName(Host.TemplateFile);

   7:       string outputFilePath = Path.Combine(templateDirectory, outputFileName);

   8:       File.WriteAllText(outputFilePath, this.GenerationEnvironment.ToString());

   9:

  10:       this.GenerationEnvironment.Remove(0, this.GenerationEnvironment.Length);

  11:   }

  12: #>

Download do código fonte

T4: Gerando vários arquivos

0

Quando usamos T4 pode ser necessário gerar vários arquivos com um uníco template, um exemplo clássico é quando estamos gerando o mapeamento para as tabelas do SGBD. Neste post vamos ver um exemplo de como gerar vários arquivos usando templates T4. O exemplo é baseado no post do Oleg.

A função que vamos usar fica no arquivo SaveOutput.tt

 

   1: <#@ template language="C#" hostspecific="true" #>

   2: <#@ import namespace="System.IO" #>

   3: <#+

   4:   void SaveOutput(string outputFileName)

   5:   {

   6:       string templateDirectory = Path.GetDirectoryName(Host.TemplateFile);

   7:       string outputFilePath = Path.Combine(templateDirectory, outputFileName);

   8:       File.WriteAllText(outputFilePath, this.GenerationEnvironment.ToString()); 

   9:  

  10:       this.GenerationEnvironment.Remove(0, this.GenerationEnvironment.Length);

  11:   }

  12: #>

 

Para gerar multiplos arquivos vamos importar o SaveOutput.tt no arquivo exemple1.tt

   1: <#@ include file="SaveOutput.tt" #>

   2:     File 1

   3: <#

   4:     SaveOutput("File1.txt");  #>

   5:    File 2

   6:   <#

   7:     SaveOutput("File2.txt");  #>

 

As informações como nome do arquivo e extensão podem ser alterados de acordo com a sua necessidade.Para visualizar os arquivos clique na opção show all files no solution explorer do visual studio.

 

No proximo post vou mostrar como acessar sua base de dados usando templates T4.

 

Download

T4: Recursos e Links

0

Pessoal, continuando com os estudo sobre T4 achei muitos links legais com ferramentas e tutoriais. vou deixar aqui pra vocês

Editor tangible T4

Este editor é integrado ao visual studio, torna o trabalho de edição muito mais legal.

PreviewT4Editor Download

 

T4 ToolBox

Prove uma série de templates prontos para serem usados além de extensões  para o visual studio, pode ser usado tanto com VB quanto C#. Muito bom pra quem quer geral código LINQ ou EF.

Download

 

Tutoriais e posts

http://www.hanselman.com/blog/T4TextTemplateTransformationToolkitCodeGenerationBestKeptVisualStudioSecret.aspx
http://www.olegsych.com/2007/12/text-template-transformation-toolkit/
http://msdn.microsoft.com/en-us/library/bb126445.aspx

Go to Top