Hi everybody!

En cierto momento nos hemos topado con la tarea de generar el código de las Entidades de Negocio(Business Entities) de un Sistema “X” como por ejemplo: Empleado, Producto, Factura, Cliente, etc… En algunos casos podríamos crear de 20-30 entidades, auque en otros casos podrían ser 100-150… uno nunca sabe. Es por ello que generar estos bloques de código resultaría una tarea muy rutinaria y algo aburrida, la cual nos podría tomar unos días.

Considerando este aspecto, deberíamos pensar en otra solución: T4(Text Template Transformation Toolkit). T4 no es más que una plantilla que generar código. Justamente, gracias a ello y agregando algunas líneas podremos generar código para nuestras Entidades, Lógica de Negocio, Acceso a Datos y hasta Procedimientos Almacenados.

A continuación les dejo el código fuente para la generación de Entidades de Negocios:

<#@ template  debug="true" hostSpecific="true" #>
<#@ template language="C#" #>
<#@ output extension=".cs" #>
<#@ assembly name="System.Data" #>
<#@ assembly name="System.Xml" #>
<#@ assembly name="Microsoft.SqlServer.ConnectionInfo" #>
<#@ assembly name="Microsoft.SqlServer.Smo" #>
<#@ assembly name="Microsoft.SqlServer.Management.Sdk.Sfc" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="System.Data.SqlClient" #>
<#@ import namespace="Microsoft.SqlServer.Management.Smo" #>
<#@ import namespace="Microsoft.SqlServer.Management.Common" #>
namespace T4
{
<#
	Server server = new Server(@"localhost\SQLEXPRESS");
	Database db = server.Databases["pubs"];
#>
<# PushIndent("\t"); #>
<# foreach (Table t in db.Tables) 
	{ #>
public class <#= t.Name #>Entity : BaseEntity
{
<# PushIndent("\t"); #>
<# foreach (Column col in t.Columns){ #>				 
public <#= ParseSqlType(col.DataType.Name) #> <#= col.Name #> {get; set;}	 			  
<# } #>	
<# PopIndent(); #>
}
<# } #>
<# PopIndent(); #>
}
 
 
<#+ 
	private string ParseSqlType(string dataType)
	{
		switch(dataType)
		{
			case "int":
				return "int";
				break;				
			case "varchar":
			case "char":
			case "text":
				return "string";
				break;
			case "money":
				return "double";
				break;
			default:
				return "object";
		}
	}
#>

Resultado de la generación:

namespace T4
{
public class authors 
{				 
public object au_id {get; set;}	 			  
public string au_lname {get; set;}	 			  
public string au_fname {get; set;}	 			  
public string phone {get; set;}	 			  
public string address {get; set;}	 			  
public string city {get; set;}	 			  
public string state {get; set;}	 			  
public string zip {get; set;}	 			  
public object contract {get; set;}	 			  
}
 
public class discounts 
{				 
public string discounttype {get; set;}	 			  				 
public string stor_id {get; set;}	 			  				 
public object lowqty {get; set;}	 			  
public object highqty {get; set;}	 			  
public object discount {get; set;}	 			  
}
...
}

Nota: En el ejemplo se trabaja con la BD Pubs. Si deseas descargarlo ingresa al siguiente enlace: http://undiati.com/2012/07/05/bd-pubs-northwind/

Enjoy…


three + = 12