[ORM-Lite] Massive

Introducción

Hace unos días realice una entrada sobre Dapper un mini ORM, y como ya comente iba a realizar una serie sobre más ejemplos de ORM ligeros. En esta ocasión le ha tocado a Massive.

¿Qué es Massive?

Bien Massive es otro ORM ligero creado por Rob Conery(Blog y Twitter), que nos permite realizar consultas a una Base de datos y su explotación en un sistema a través de objetos Expando.

¿Por dónde empezar?

Para poder trabajar con Massive, tenemos dos posibilidades:

– Agregarlo como un paquete a nuestro proyecto desde Nuget (No es la ultima versión a fecha de hoy)

– Descargar el único fichero que genera desde GitHub.

Existe un fichero disponible para los siguientes tipos de Base de datos:

– Sql Server.

– Oracle.

– SQLLite.

– PostgreSQL.

Para este post vamos a utilizar el de SQL Server, y la misma tabla que vimos el otro día sobre “CandidateInfo”.

Algunos Ejemplos

Vamos a ver algunos ejemplos de la utilización de Massive dentro de un proyecto de .NET.

El primer paso, como decía antes, será agregar la clase de Massive a nuestro proyecto.

A continuación vamos a definir una clase que va servir para trabajar con la tabla CandidateInfo de nuestra Base de Datos:

   1: public class CandidateInfo : Massive.DynamicModel 

   2:  {

   3:     public CandidateInfo() : base("MyCV","CandidateInfo","CandidateId")

   4:     {

   5:          

   6:     }

   7:  }

 

Nuestra clase CandidateInfo va a heredar de la Clase DynamicModel, y vamos a hacer que se implemente el constructor base, indicándole los siguientes parámetros:

– Cadena de Conexión: conexión existente en el fichero de configuración de la aplicación que queremos utilizar.

– Nombre de la tabla que queremos utilizar.

– Campo clave de la tabla.

 

Una vez definida nuestra clase vamos a ver los propios ejemplos:

Consulta de Datos

Para realizar una simple consulta de datos, vamos a necesitar declarar un objeto del tipo de la clase anteriormente indicada:

 
   1: var candidateInfo = new App_Code.CandidateInfo();

 

Una vez definida nuestra tabla, vamos a obtener:

– Todos los resultados:

   1: var query = candidateInfo.All();

   2: foreach (var candidato in query)

   3: {

   4:     var dictionary = ObjectExtensions.ToDictionary(candidato);

   5:     foreach (var item in dictionary)

   6:     {

   7:         Console.WriteLine(String.Format("{0} : {1}", item.Key, item.Value));

   8:     }

   9: }  

 

– Resultados Filtrados:

 
   1: var query = candidateInfo.All("CandidateName like '%a%'");

   2: foreach (var candidato in query)

   3: {

   4:     var dictionary = ObjectExtensions.ToDictionary(candidato);

   5:     foreach (var item in dictionary)

   6:     {

   7:         Console.WriteLine(String.Format("{0} : {1}", item.Key, item.Value));

   8:     }

   9: }  

El Método All, dispone de los siguientes parámetros:

– Where: para realizar un filtro.

– Order: para establecer el orden de los resultados.

– Limit: Para establecer un Top de los resultados.

– Columnas: para indicar que columnas se van a establecer.

– Parámetros: se pueden establecer los valores del filtro como parámetros.

Todos los parámetros son opcionales.

 

Al tratarse de tipos anónimos podríamos realizar la siguiente consulta:

   1: var query =  candidateInfo.Query(

   2:                "Select CandidateName,CountryName from CandidateInfo inner join CountryInfo on CountryId=CandidateCountry");

   3:  

   4:            

   5:            foreach(var dato in query)

   6:            {

   7:  

   8:                var dictionary = ObjectExtensions.ToDictionary(dato);

   9:                foreach (var item in dictionary)

  10:                {

  11:                    Console.WriteLine(String.Format("{0} : {1}", item.Key, item.Value));

  12:                }

  13:            }

Como crear un  nuevo registro:

   1: var dato = candidateInfo.Insert(new

   2:                              {

   3:                                  CandidateName = "Javier",

   4:                                  CandidateLastName = "Torrecilla",

   5:                                  CandidateBirthDate = DateTime.Now,

   6:                                  CandidateCountry = 1,

   7:                                  CandidateCity = 1,

   8:                                  CandidateEmail = "r@yahoo.es"

   9:                              });

 

Como realizar la eliminación de un registro:

   1:  int delete = candidateInfo.Delete(@where: "CandidateName =@0", args: "j");

Como realizar una actualización de un dato:

   1:   candidateInfo.Update(new {CandidateLastName = "Torrecilla Puertas"}, guid);

 

También existe la posibilidad de ejecutar una sentencia sql, un ojbeto DBCommand o una lista de DBCommand a través del método Execute.

 

Conclusiones

Massive, nos provee una forma bastante rápida de manejar nuestra Base de Datos, sin tener que escribir gran cantidad de código.

Nos da la flexibilidad que aporta dynamic y el trabajo con tipos anónimos.

Por otro lado, al ser un único fichero podemos realizar nuestras propias modificaciones, aunque nos salgamos de la línea definida por Rob.

El próximo post de la serie será acerca de PetaPoco

3 comentarios en “[ORM-Lite] Massive”

Deja un comentario

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