[ORM]ORAPOCO: Trabajando contra Oracle

Introducción

El objeto de este post, es hablar de un pequeño proyecto que acabo de publicar: ORAPOCO. Podéis encontrarlo tanto en GITHUB como en Nuget.

¿Qué es ORAPOCO?

Es un pequeño proyecto que va a permitir trabajar con objetos POCO y contra nuestra Base de Datos Oracle.

El proyecto consta de los siguientes ficheros:

– OracleDB.cs:

Esta clase va a ser la encargada de llevar a cabo todas las acciones contra la Base de Datos.

Los métodos disponibles son:

Método Descripción
QueryAll<T> Dado un tipo T(un objeto poco) va a ejecutar una consulta sobre la BD y va a devolver una lista de dicho T.
Query<T> Del mismo modo que QueryAll, va a devolver un conjunto de resultados de T, pero con la opción de seleccionar columnas, ordenar, establecer una clausula where, hacer take y skip.
Insert<T> Dado un tipo T y una entidad de dicho tipo va a tratar de realizar una inserción en la Base de Datos.
Update<T> Dado un tipo T y una entidad de dicho tipo va a tratar de realizar una actualizacion en la Base de Datos según los valores de clave primaria de dicha entidad.
Delete<T> Dado un tipo T y una entidad de dicho tipo va a tratar de realizar un borrado en la Base de Datos según los valores de clave primaria de dicha entidad.
MultipleQuery<T1,T2> Va a devolver un objeto de Tipo Tuple con el conjunto de resultados indicados por T1, T2 y T3 (2 sobrecargas)

 

– ORAPOCO.tt: Plantilla de generación de código que a través de una conexión contra la BD ORACLE va a definir clases POCO que podremos utilizar en nuestra aplicación.

Dentro de dicha plantilla se hace uso de la primera conexión existente en el fichero de configuración de la aplicación y se define una variable “_schemma” que será la que necesitemos indicar el propietario para buscar las  tablas en Oracle.

– IsPkAttribute.cs:

Atributo que va a servir para configurar las claves primarias de nuestros Objetos POCO, y que se va a utilizar a la hora de llevar a cabo las inserciones o actualizaciones, en la Base de Datos.

¿Cómo empezar a trabajar con ORAPOCO?

Podeís bajar el código fuente desde GITHUB, o instalar el paquete desde Nuget:

PM> Install-Package ORAPOCO

Ejemplos:

Un ejemplo de objeto POCO generado a través de la plantilla:

   1: public class TA_USUARIOS

   2:    {

   3:        [IsPK(true)]

   4:        public System.Int32 USUA_CODIGO_USUARIO { get; set; }

   5:  

   6:        public System.String USUA_NOMBRE { get; set; }

   7:  

   8:        public System.String USUA_APELLIDO1 { get; set; }

   9:  

  10:        public System.String USUA_APELLIDO2 { get; set; }

  11:  

  12:        public System.DateTime? USUA_FECHA_ALTA { get; set; }

  13:  

  14:        public System.String USUA_LOGIN_USUARIO { get; set; }

  15:  

  16:    }

¿Cómo  llevar a cabo una inserción?

   1: var db = new POCO.Ora.TP.OracleDB("SIFCO");

   2:  

   3:   var usu = new POCO.Ora.TP.TA_USUARIOS { 

   4:                               USUA_APELLIDO1 = "Torrecilla",

   5:                               USUA_APELLIDO2 = "Puertas", 

   6:                               USUA_CODIGO_USUARIO = 874,

   7:                               USUA_FECHA_ALTA = DateTime.Now, 

   8:                               USUA_LOGIN_USUARIO = "test", 

   9:                               USUA_NOMBRE = "Javi" };

  10:   db.Insert<POCO.Ora.TP.TA_USUARIOS>(usu);

¿Cómo llevar a cabo una actualización?

   1: var usu = new POCO.Ora.TP.TA_USUARIOS { 

   2:                             USUA_APELLIDO1 = "Torrecilla",

   3:                             USUA_APELLIDO2 = "Puertas", 

   4:                             USUA_CODIGO_USUARIO = 874,

   5:                             USUA_FECHA_ALTA = DateTime.Now, 

   6:                             USUA_LOGIN_USUARIO = "test", 

   7:                             USUA_NOMBRE = "Javi" };

   8: db.Update<POCO.Ora.TP.TA_USUARIOS>(usu);

 

¿Cómo eliminar un registro?

   1: var usu = new POCO.Ora.TP.TA_USUARIOS { 

   2:                             USUA_APELLIDO1 = "Torrecilla",

   3:                             USUA_APELLIDO2 = "Puertas", 

   4:                             USUA_CODIGO_USUARIO = 874,

   5:                             USUA_FECHA_ALTA = DateTime.Now, 

   6:                             USUA_LOGIN_USUARIO = "test", 

   7:                             USUA_NOMBRE = "Javi" };

   8: db.Delete<POCO.Ora.TP.TA_USUARIOS>(usu);

 

¿Cómo consultar datos?

– Todos los resultados:

   1: var query = db.QueryAll<POCO.Ora.TP.TA_USUARIOS>();

 

– Tomar 5 elementos y saltar 5:

   1: var query = db.Query<POCO.Ora.TP.TA_USUARIOS>(take: 5);

 

   1: var query = db.Query<POCO.Ora.TP.TA_USUARIOS>(skip: 5);

 

 

– Resultados Ordenando:

   1: var query = db.Query<POCO.Ora.TP.TA_USUARIOS>(order: "USUA_APELLIDO1 ASC, USUA_APELLIDO2 ASC");

-Resultados filtrando:

   1: var query = db.Query<POCO.Ora.TP.TA_USUARIOS>(where: "USUA_APELLIDO1 LIKE (:0)",args: new object[]{"%or%"});

– Multiples resultados:

   1: var multiQuery = db.MultipleQuery<POCO.Ora.TP.TA_USUARIOS, POCO.Ora.TP.TA_FUNCIONALIDADES>();

multiQuery tendrá dentro de “item1” la colección de Usuarios, y dentro de “item2” la colección de Funcionalidades.

 

 

Bueno espero que me dejéis comentarios, lo probéis, me digáis posibles mejoras, es decir, quiero feedback :p.

 

Saludos!

5 comentarios en “[ORM]ORAPOCO: Trabajando contra Oracle”

  1. Buenas!
    Yo sin haber probado nada, tan solo viendo el código…
    Tienes
    [IsPK(true)]

    Es necesario el true? Es decir, que hace
    [IsPK(false)]?

    Buena iniciativa!
    Un abrazo!

  2. Hola crack!,

    Jeje la verdad es que creo que se me fue un poco la pinza con eso :p en la proxima versión lo arreglo :p

    Muchas gracias por comentar!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *