T4
T4: Acessando o banco de dados
0Templates 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: #>
T4: Gerando vários arquivos
0Quando 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.
T4: Recursos e Links
0Pessoal, 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.
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.
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