Skip to main content
bases de datos

Introduccion a solicitudes de datos con Microsoft Entity Framework

Autor: Reynaldo Navedo

Publicado:

Microsoft Entity Framework (EF) es un ORM (Object-Relational Mapping) que simplifica las operaciones con bases de datos en aplicaciones .NET al presentarlas como objetos C#. A continuación, te mostraré cómo puedes utilizar Entity Framework para crear consultas (queries) desde las más simples hasta las más complejas.


1. Configuración Inicial (DbContext y Modelos)

Primero, necesitas tener configurado un DbContext, el cual es el puente entre tu base de datos y tus clases C#. A continuación te muestro un ejemplo básico de cómo estructurar tu modelo y tu DbContext:

// Modelo
public class Producto
{
    public int ProductoId { get; set; }
    public string Nombre { get; set; }
    public decimal Precio { get; set; }
}

// DbContext
public class TiendaContext : DbContext
{
    public DbSet<Producto> Productos { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer(@"Server=mi_servidor;Database=mi_base_de_datos;Trusted_Connection=True;");
    }
}


Una vez que tengas el contexto y las entidades configuradas, puedes empezar a usar EF para realizar consultas a la base de datos.


2. Consultas Simples

Seleccionar todos los registros de una tabla

using (var context = new TiendaContext())
{
    var productos = context.Productos.ToList();

    foreach (var producto in productos)
    {
        Console.WriteLine($"{producto.ProductoId}: {producto.Nombre} - ${producto.Precio}");
    }
}

Esta consulta obtiene todos los registros de la tabla Productos.


Filtrar con Where

Puedes filtrar los resultados utilizando Where:

using (var context = new TiendaContext())
{
    var productosBaratos = context.Productos
        .Where(p => p.Precio < 100)
        .ToList();

    foreach (var producto in productosBaratos)
    {
        Console.WriteLine($"{producto.Nombre} cuesta menos de $100.");
    }
}


Este ejemplo filtra solo los productos cuyo precio sea menor de 100.


3. Consultas Más Complejas

Ordenar los resultados

Si deseas ordenar los resultados de tu consulta (por ejemplo, ascendiendo el precio):

using (var context = new TiendaContext())
{
    var productosOrdenados = context.Productos
        .OrderBy(p => p.Precio)
        .ToList();

    foreach (var producto in productosOrdenados)
    {
        Console.WriteLine($"{producto.Nombre}: ${producto.Precio}");
    }
}


Seleccionar solo ciertas columnas

A veces, podrías no necesitar todas las propiedades de tu modelo:

using (var context = new TiendaContext())
{
    var nombresDeProductos = context.Productos
        .Select(p => new { p.Nombre, p.Precio })
        .ToList();

    foreach (var producto in nombresDeProductos)
    {
        Console.WriteLine($"{producto.Nombre}: ${producto.Precio}");
    }
}


Paginación

Si tu tabla tiene muchos registros, podrías limitar cuántos se devuelven:

using (var context = new TiendaContext())
{
    var productosPaginados = context.Productos
        .OrderBy(p => p.ProductoId)
        .Skip(0)  // Saltar los primeros `x` elementos, en este caso 0
        .Take(10) // Tomar solo 10 elementos
        .ToList();

    foreach (var producto in productosPaginados)
    {
        Console.WriteLine($"{producto.Nombre}: ${producto.Precio}");
    }
}


Incluyendo relaciones (Eager Loading)

Cuando tienes tablas relacionadas, por ejemplo, Producto y Categoria, puedes cargar datos relacionados usando Include:

public class Categoria
{
    public int CategoriaId { get; set; }
    public string Nombre { get; set; }

    public List<Producto> Productos { get; set; }
}

// Imaginemos que tenemos una relación Producto-Categoria y queremos incluirla en la consulta:
using (var context = new TiendaContext())
{
    var productosConCategoria = context.Productos
        .Include(p => p.Categoria) // Eager loading de la categoría
        .ToList();

    foreach (var producto in productosConCategoria)
    {
        Console.WriteLine($"{producto.Nombre} pertenece a la categoria: {producto.Categoria.Nombre}");
    }
}


4. Consultas Complejas (JOIN e INNER QUERIES)

Realizando JOINs con LINQ

Si tienes más de una tabla relacionada y quieres hacer consultas como un "JOIN":

var productosConCategoria = from p in context.Productos
                            join c in context.Categorias on p.CategoriaId equals c.CategoriaId
                            select new
                            {
                                ProductoNombre = p.Nombre,
                                CategoriaNombre = c.Nombre
                            };

foreach (var item in productosConCategoria)
{
    Console.WriteLine($"{item.ProductoNombre} pertenece a {item.CategoriaNombre}");
}


Este es un ejemplo de cómo hacer un JOIN clásico entre las tablas Productos y Categorias.

5. Consultas con funciones agregadas

Puedes aplicar funciones como SumCountAvg, etc., usando LINQ:


Calcular el total de productos

var totalProductos = context.Productos.Count();
Console.WriteLine($"Total de productos: {totalProductos}");


Sumar los precios de todos los productos

var totalPrecios = context.Productos.Sum(p => p.Precio);
Console.WriteLine($"Suma de todos los precios: ${totalPrecios}");


Precio promedio de los productos

var precioPromedio = context.Productos.Average(p => p.Precio);
Console.WriteLine($"El precio promedio de los productos es: ${precioPromedio}");


Conclusión

Microsoft Entity Framework ofrece una forma sencilla de trabajar con bases de datos SQL utilizando tu código C#. Desde obtener los registros de una tabla hasta realizar consultas complejas con JOINs o subconsultas, EF te permite hacer todo esto de una manera muy intuitiva y segura. Pendiente a mi canal de YouTube para videos y tutoriales relacionados.

Comparte este contenido