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