Anexsoft | Blog y dictado de cursos de Tecnología

En este encontrarás tutoriales de tecnología como PHP, ASP.NET MVC, Front-End, entre otros y cursos exigentes de modalidad online que te ayudarán a crecer profesionalmente.

Alternativa al Entity Framework, ejemplo de NPoco con CSharp
Actualizado el 09 Mayo, 2017 y leído 2,417 veces
Calificación: Sin calificar 10

Alternativa al Entity Framework, ejemplo de NPoco con CSharp

Anexsoft

Este micro ORM es una alternativa ideal al Entity Framework debido a su performance y curva de aprendizaje, en el video adjunto explicamos como trabajar con este.

 

¿Cómo funciona?

Lo primero que debemos hacer es agregar la referencia desde el nugget, para esto buscamos en el nugget NPoco y solo faltaría crear instanciar la clase 

using(var db = new Database("NPocoExample")) { .. }

 

Funcionalidades soportadas

  • Queries inteligentes
  • Expresiones Lambda con Linq (Limitado)
  • Consultas muy rápidas
  • Annotations
  • Fluent Mapping (lo que vendría a ser el Fluent Api del EF)
  • Paginación
  • Transacciones
  • Manejo de relaciones

 

Select

public static IEnumerable<Empleado> GetAll()
{
    var result = new List<Empleado>();
    
    try
    {
        using (IDatabase db = DbContext.GetInstance())
        {
            #region Select All
            result = db.Fetch<Empleado>();
            #endregion
    
            #region Select especificando las columnas
            //result =  db.Fetch<Empleado>("SELECT id, Nombre, Apellido FROM Empleado");
            #endregion
    
            #region Select con Where
            //result = db.Fetch<Empleado>("SELECT * FROM Empleado WHERE Sexo = @0", 2);
            #endregion
    
            #region Select con Where directo, omitiendo el SELECT *
            //result = db.Fetch<Empleado>("WHERE Sexo = @0", 2);
            #endregion
    
            #region Select con Where directo, omitiendo el SELECT *
            //result = db.Fetch<Empleado>("WHERE Sexo = @0", 2);
            #endregion
        }
    }
    catch (Exception e)
    {
        Console.Write(e.Message);
    }
    
    return result;
}

 

Los queries retornados son más limpios que Entity Framework

Un SELECT simple

SELECT id, nombre, apellido, profesion__id, profesion__name FROM Empleado

Un SELECT con Includes

exec sp_executesql N'SELECT [E].[id] as [id], [E].[Profesion_id] as [Profesion_id], [E].[Nombre] as [Nombre], [E].[Apellido] as [Apellido], [E].[Correo] as [Correo], [E].[Sexo] as [Sexo], [E].[FechaNacimiento] as [FechaNacimiento], [E].[FechaRegistro] as [FechaRegistro], [E].[Sueldo] as [Sueldo], [P].[id] as [Profesion__id], [P].[Nombre] as [Profesion__Nombre] FROM [Empleado] [E]  
  LEFT JOIN [Profesion] [P] ON [E].[Profesion_id] = [P].[id] 
WHERE ([E].[Profesion_id] = @0) 
ORDER BY [FechaNacimiento] ASC',N'@0 int',@0=2

El EF genera unos queries horribles que disminuyen bastante el performance.

 

Un solo registro

En este ejemplo tenemos 2 opciones SingleOrDefaultById que encontrará un registro haciendo un WHERE por el PK de nuestra clase o FirstOrDefault que encontrará el primer registro encontrado en base a nuestra condición.

public static Empleado Get(int id = 0)
{
    var result = new Empleado();

    try
    {
        using (IDatabase db = DbContext.GetInstance())
        {
            if (id > 0)
            {
                result = db.SingleOrDefaultById<Empleado>(id);
            }
            else
            {
                result = db.FirstOrDefault<Empleado>("WHERE id IS NOT NULL");
            }
                
        }
    }
    catch (Exception e)
    {
        Console.Write(e.Message);
    }

    return result;
}

 

Insert, Update, Delete

public static void Insert(Empleado model)
{
    try
    {
        using (IDatabase db = DbContext.GetInstance())
        {
            db.Insert(model);
        }
    }
    catch (Exception e)
    {
        Console.Write(e.Message);
    }
}

public static void Update(Empleado model)
{
    try
    {
        using (IDatabase db = DbContext.GetInstance())
        {
            var originalModel = db.SingleById<Empleado>(model.id);

            originalModel.Nombre = model.Nombre;
            originalModel.Apellido = model.Apellido;
            originalModel.Correo = model.Correo;

            db.Update(originalModel);
        }
    }
    catch (Exception e)
    {
        Console.Write(e.Message);
    }
}

public static void Delete(int id)
{
    try
    {
        using (IDatabase db = DbContext.GetInstance())
        {
            db.Delete<Empleado>(id);
        }
    }
    catch (Exception e)
    {
        Console.Write(e.Message);
    }
}

Adicionalmente, para un insertOrUpdate tenemos el método Save, lo pueden ver en su wiki.

 

Conclusiones

  • Para Queries muy difíciles lo mejor y más recomendado es que hagas una vista de SQL, luego crees una clase de C# con los campos de tu vista.
  • Se extraña tener un sistema de migraciones, será cosa de buscar si existe una alternativa.
  • Adiós a ASP.NET Identity, pero existe una forma de usar Owin y un sistema de autenticación sin depender de este, creo que sería lo más óptimo.

 

PD: adjunto el ejemplo para descargar del GitHub y el video explicativo

¡Adquiera ya!

  • Software de Venta e Inventario hecho en PHP y Codeigniter

    Software de Venta e Inventario hecho en PHP y Codeigniter
  • Código de fuente de Red Social desarrollada en ASP.NET MVC

    Código de fuente de Red Social desarrollada en ASP.NET MVC
  • Software de Portafolio Profesional hecho en ASP.NET MVC 5 C#

    Software de Portafolio Profesional hecho en ASP.NET MVC 5 C#

Últimas publicaciones

Encuesta

¿Sobre qué te gustaría que se hable más?

Síguenos

Estudia con nosotros y crece profesionalmente

Nuestros cursos han sido hecho en base a lo que demanda el mercado hoy en día.
La experiencia obtenida es la de un ambiente laboral.

Anexsoft
© 2017 Anexsoft, blog y cursos online de TI.