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…
