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:
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!
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!
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!
Introducción Hace unos días publique ORAPOCO , y hoy lanzo una nueva versión con algunas features y modificaciones
Introducción Hace unos días publique ORAPOCO , un ORM ligero para trabajar con Bases de Datos Oracle
Continuando con mi particular cruzada de crear un Mini ORM para trabajar con ORACLE, publico una nueva