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