Subsonic y C# (1)

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.

Pantalla principal de SubStage

Pantalla principal de SubStage

  • Crear Nuevo Proyecto
  1. Lo primero será dar clic en el primer botón para crear un nuevo proyecto (clic en la imagen para agrandar).
  2. cambiaremos el nombre por el de nuestro proyecto en Project Name.
  • Crear Nueva cadena de conexión
  1. Clic en el tercer botón para agregar una nueva cadena de conexión.
  2. 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;

  3. 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.
  • Crear el Proveedor
  1. 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.
  2. 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.
  3. Estableceremos la propiedad ConnectionStringID al nombre de la conexión que creamos en el segundo punto.
  4. 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.
  5. 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.

  6. Con las opciones por default podríamos trabajar bien, pero algunas propiedades que les pueden interesar son:
    1. excludeTableList Permite indicar por medio de una mascara, lista o ambas las tablas que no queremos generar clases, ej: Lista*, p*, procesos,reportes,generados.
    2. 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.
    3. removeUnderscores Nos quita los “_” de los nombres de nuestras tablas al generar las clases, T_Ejemplo se generaría como TEjemplo.
  7. 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,

Opciones de Generación de SubStage

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.

using SoloQuiero.Data.DS;

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:

Category miCategoria = new Categoria(3);

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:

Category miCategoria = new Categoria();
miCategoria.CategoryName= "Mi Nueva Categoría";
miCategoria.Description="Esta Categoría no debería usarse nunca";
miCategoria.Save();

Borrar un registro:

Category.Delete(3);

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

2 Comment(s)

  1. Seria bueno que espesificaras la vercion de subsonic que usas

    San Miguel de Allende | Jul 29, 2009 | Reply

  2. la versión es la ultima de la rama 2.x la 2.1 :)

    Administrador | Jul 29, 2009 | Reply

Post a Comment