[ORM]ORAPOCO: Trabajando contra Oracle - El blog de Javier Torrecilla

[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!

Published 18/1/2012 10:25 por Javier Torrecilla
Archivado en: ,,,,,
Comparte este post:
http://geeks.ms/blogs/jtorrecilla/archive/2012/01/18/orm-orapoco-trabajando-contra-oracle.aspx

Comentarios

# re: [ORM]ORAPOCO: Trabajando contra Oracle

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!

Thursday, January 19, 2012 12:11 PM por Eduard Tomàs i Avellana

# re: [ORM]ORAPOCO: Trabajando contra Oracle

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!

Thursday, January 19, 2012 1:24 PM por Javier Torrecilla

# ORAPOCO: Primera actualización

Introducción Hace unos días publique ORAPOCO , y hoy lanzo una nueva versión con algunas features y modificaciones

Monday, January 23, 2012 1:21 PM por El blog de Javier Torrecilla

# ORAPOCO: Update 2

Introducción Hace unos días publique ORAPOCO , un ORM ligero para trabajar con Bases de Datos Oracle

Monday, January 30, 2012 11:03 AM por El blog de Javier Torrecilla

# #ORAPOCO: V2.1

Continuando con mi particular cruzada de crear un Mini ORM para trabajar con ORACLE, publico una nueva

Wednesday, February 15, 2012 10:28 AM por El blog de Javier Torrecilla