Subsonic y C# (1)
By Administrador on Feb 17, 2009 in .Net, Asp.Net, SubSonic
Bueno, este es el primer post de ejemplo para iniciar con SubSonic.
SubSonic es un componente o utilería que nos permite abstraernos del código necesario para conectarnos a una base de datos (Sql Server, Oracle, MySql, Etc) y también del código necesario para grabar/eliminar/actualizar un registro (hacer un ABM con SubSonic es facilísimo). Aunque no es tan potente como nHibernate, nos ayuda mucho en el desarrollo de nuestras aplicaciones/sitios web que necesitan conectar a una base de datos.
Primero necesitaremos bajar SubSonic, Una vez que lo tengamos instalado, podemos utilizar SubStage para generar la configuración para nuestra aplicación.
- Lo primero será dar clic en el primer botón para crear un nuevo proyecto (clic en la imagen para agrandar).
- cambiaremos el nombre por el de nuestro proyecto en Project Name.
- Clic en el tercer botón para agregar una nueva cadena de conexión.
- En la propiedad ConnectionString debemos escribir la cadena de conexión a nuestra base de datos.Para efectos de prueba puede utilizar la cadena de conexión siguiente, si tiene Sql Server y las bases de datos de prueba instaladas.
Data Source=(local); Database=Northwind; Integrated Security=true;
- En la propiedad Name debemos escribir un nombre descriptivo para esta conexión, o bien el nombre de la base de datos que usará, sobre todo si tendremos más de una conexión en la configuración de nuestro sitio web/aplicación .net.
- Seleccionamos el nombre de nuestro proyecto en la lista a la izquierda y damos Clic en el segundo botón para crear un nuevo Provider.
- Lo primero a hacer es modificar la propiedad Name nuevamente por un nombre descriptivo, o algo como “MiProyectoProviderPrincipal”, de tal manera que si necesitamos de más de un proveedor, pues podamos distinguirlos fácilmente.
- Estableceremos la propiedad ConnectionStringID al nombre de la conexión que creamos en el segundo punto.
- GeneratedNameSpace es de suma importancia seleccionar con cuidado el nombre del NameSpace bajo el que queremos que Subsonic nos genere el código para nuestras clases.Yo Acostumbro a Usar NombreDelCliente.Data.DS para poder reutilizar en distintos proyectos del mismo cliente mis librerías de acceso a datos, además puedo agregar más clases al NameSpace Data relacionadas con la base de datos, y finalmente DS que significa Data Source, únicamente las librerias de acceso a datos, por si necesito generar una librería con únicamente estos.
- Estableceremos la propiedad ProviderTypeID al tipo de motor de bases de datos que vayamos a utilizar, entre las opciones disponemos de
- Sql Server
- MySql (ISAM)
- MySql (InnoDB)
- Oracle
- Enterprise Library
- SqlLite
- SqlCE
Existe también un Proveedor de datos para Access.
- Con las opciones por default podríamos trabajar bien, pero algunas propiedades que les pueden interesar son:
- excludeTableList Permite indicar por medio de una mascara, lista o ambas las tablas que no queremos generar clases, ej: Lista*, p*, procesos,reportes,generados.
- generateRelatedTablesAsProperties Interesante opción que hace que podamos acceder desde una instancia de alguna clase a los registros hijos de otra tabla por medio de una propiedad.
- removeUnderscores Nos quita los “_” de los nombres de nuestras tablas al generar las clases, T_Ejemplo se generaría como TEjemplo.
- Una vez completado esto, tenemos que modificar la propiedad CodeGenerationPath en SubStage Configuration a la ruta donde queremos que nos genere el código.Luego, Utilizaremos el botón
para generar el código.SubStage nos generará un archivo .cs por cada tabla/procedimiento almacenado en nuestra base de datos.En el apartado de EventLog de SubStage, podremos ver los posibles errores y sucesos al generar el código. Luego deberemos copiar de Configuration OutPut la configuracion a nuestro web.config o App.config.
El Apartado Event Log nos mostrará el resultado de generar nuestras clases, Configuration Output la configuración utilizada y Generated Files contiene nuestros archivos generados,
Una vez agregado a su proyecto la configuración de SubSonic, y agregada la referencia a SubSonic.dll en su proyecto (Esto se verá más a fondo en la segunda parte de este artículo), un ejemplo de código es este: (Yo utilice la cadena de conexión a la base de datos de ejemplo “Northwind“, usted debe actualizar el nombre del NameSpace seleccionado y el nombre de sus tablas.
namespace SubSonic1 {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e) {
CategoryCollection lista = new CategoryController()
.FetchAll();
string resultado = "";
foreach (Category categoria in lista) {
resultado += "\r\n" +categoria.CategoryName;
}
listado.Text = "Existen "+resultado+" Categorías" ;
listado.Text += resultado;
}
private void button2_Click(object sender, EventArgs e) {
int pk = 3;
Category categoria = new Category(pk);
listado.Text = "Tabla: " + categoria.TableName;
listado.Text += "\r\nCategoryName" + categoria.CategoryName;
listado.Text += "\r\nPrimary Key" + categoria.CategoryID;
listado.Text += "\r\nPrimary Key" + categoria.Description;
}
}
}
Notas Finales
SubSonic es gratuito y nos permite abstraernos del acceso a datos, evitándonos el tener que conectar a la base de datos, crear los parámetros para cada consulta, etc. Para ello, SubSonic nos provee de métodos para realizar ciertas acciones, por ejemplo:
Nos crea una clase del tipo Category (una clase derivada de nuestra tabla) y se conecta a la base de datos, ejecuta un query (Where CategoryID=3) y establece las propiedades de la clase a los valores de los campos para ese registro.
Agregar un nuevo registro es tan fácil como esto:
miCategoria.CategoryName= "Mi Nueva Categoría";
miCategoria.Description="Esta Categoría no debería usarse nunca";
miCategoria.Save();
Borrar un registro:
Si su aplicación es WinForm, deben agregar también las siguientes referencias a su proyecto
System.Web
System.Configuration
Bajar Proyecto Demo
Hasta la próxima entrega de SubSonic


Seria bueno que espesificaras la vercion de subsonic que usas
San Miguel de Allende | Jul 29, 2009 | Reply
la versión es la ultima de la rama 2.x la 2.1
Administrador | Jul 29, 2009 | Reply