Sorry I’m late getting this up. I will give usual excuses of being busy.
Since I developed this talk on this blog, this entry will essentially be a link list. I put a copy of the slides in Google doc and you can reference it here
Template Parts
I presented a slide that showed the basic template parts in a small mock template:
<#@ template language="C#" #> <#@ directive property=“value” #> <# var item = "Statement Block"; #> Text Block <#= "Expression Block" #> <#+ string ClassFeatureBlock(string thingy) { return thingy; } #>
Hello World Monty
I showed some of the elementary features of T4 templates by refactoring a basic template that would create a text file that contained the infamous words “Hello World”. A script of that exercise is here
Basic Code Generation Demonstration
To demonstrate Code Generation I set out to generate a simple T-SQL Select Statement using Sql Management Objects (SMO).
The Target Code looked something like this:
Include (SelectSpInclude.tt)
<#@ import namespace="Microsoft.VisualStudio.TextTemplating" #> <#@ assembly name="Microsoft.SqlServer.ConnectionInfo" #> <#@ assembly name="Microsoft.SqlServer.Smo" #> <#@ import namespace="Microsoft.SqlServer.Management.Smo" #> <#+ public class SelectSpInclude: TextTransformation { public string ServerName; public string DbName; public string TableName; public override string TransformText() { Table table = getTable(ServerName, DbName, TableName); #> SELECT <#+ bool forgetComma = true; foreach (Column col in table.Columns) { #><#+if (!forgetComma) Write(" ,");#>[<#= col.Name #>] <#+ forgetComma = false; } #> FROM <#= table.Name #><#+ return this.GenerationEnvironment.ToString(); } Table getTable(string serverName, string dbName, string tableName) { Server server = new Server(serverName); Database database = new Database(server, dbName); Table table = new Table(database, tableName); table.Refresh(); return table; } } #>
Template (EmployeesSp.tt)
<#@ template language="C#v3.5" #> <#@ output extension="sql" #> <#@ include file="SelectSpInclude.tt" #> <# SelectSpInclude gen = new SelectSpInclude(); gen.ServerName = @"localhost\SQLEXPRESS"; gen.DbName = "Northwind"; gen.TableName = "Employees"; Write(gen.TransformText()); #>
Result (EmployeesSp.sql)
SELECT [EmployeeID] ,[LastName] ,[FirstName] ,[Title] ,[TitleOfCourtesy] ,[BirthDate] ,[HireDate] ,[Address] ,[City] ,[Region] ,[PostalCode] ,[Country] ,[HomePhone] ,[Extension] ,[Photo] ,[Notes] ,[ReportsTo] ,[PhotoPath] FROM Employees
Somewhere in this part of the presentation, someone asked if it is possible to generate a series of files from a single template, a separate code file for each table in a database. Oleg Sych has a blog post that does just that here
Generating a Nullable ADO.NET DataSet Wrapper
This is when I went to Show and Tell Mode. I demonstrate a Nullable DataSet Wrapper that I wrote in these blog entries. I wrote the templates in VB.NET to generate code in C#.
No comments:
Post a Comment