The IRepositorioEquipo interface and RepositorioEquipo implementation provide comprehensive data access operations for managing teams. This repository includes advanced features like search by name, filtering by municipality, and managing relationships with municipalities and technical directors.
using Torneo.App.Dominio;namespace Torneo.App.Persistencia{ public interface IRepositorioEquipo { public Equipo AddEquipo(Equipo equipo, int idMunicipio, int idDT); public IEnumerable<Equipo> GetAllEquipos(); public Equipo GetEquipo(int idEquipo); public Equipo UpdateEquipo(Equipo equipo, int idMunicipio, int idDT); public Equipo DeleteEquipo(int equipo); public IEnumerable<Equipo> GetEquiposMunicipio(int idMunicipio); public IEnumerable<Equipo> SearchEquipos(string nombre); public bool validateDuplicates(Equipo equipo); }}
using Microsoft.EntityFrameworkCore;using Torneo.App.Dominio;namespace Torneo.App.Persistencia{ public class RepositorioEquipo : IRepositorioEquipo { private DataContext _dataContext = new DataContext(); // Implementation methods... }}
PartidosLocal - Matches where team plays as home team
PartidosVisitante - Matches where team plays as visiting team
Usage Example:
var todosEquipos = repositorioEquipo.GetAllEquipos();foreach (var equipo in todosEquipos){ Console.WriteLine($"Equipo: {equipo.Nombre}"); Console.WriteLine($" Municipio: {equipo.Municipio?.Nombre}"); Console.WriteLine($" DT: {equipo.DirectorTecnico?.Nombre}"); Console.WriteLine($" Jugadores: {equipo.Jugadores.Count()}"); Console.WriteLine($" Partidos como local: {equipo.PartidosLocal.Count()}"); Console.WriteLine($" Partidos como visitante: {equipo.PartidosVisitante.Count()}");}
public Equipo DeleteEquipo(int idEquipo){ var equipoEncontrado = GetEquipo(idEquipo); if (equipoEncontrado != null) { _dataContext.Equipos.Remove(equipoEncontrado); _dataContext.SaveChanges(); } else { Console.WriteLine("No se encontró el equipo"); } return equipoEncontrado;}
Deleting a team may fail if:
The team has associated players (foreign key constraint)
The team is referenced in matches (foreign key constraint)
All foreign keys are configured with DeleteBehavior.Restrict.
Usage Example:
var equipoEliminado = repositorioEquipo.DeleteEquipo(10);if (equipoEliminado != null){ Console.WriteLine($"Equipo eliminado: {equipoEliminado.Nombre}");}else{ Console.WriteLine("No se pudo eliminar el equipo");}
var equiposDeMedellín = repositorioEquipo.GetEquiposMunicipio(5);Console.WriteLine($"Equipos en Medellín: {equiposDeMedellín.Count()}");foreach (var equipo in equiposDeMedellín){ Console.WriteLine($" - {equipo.Nombre}"); Console.WriteLine($" Jugadores: {equipo.Jugadores.Count()}"); Console.WriteLine($" DT: {equipo.DirectorTecnico?.Nombre}");}
Collection of Equipo entities whose names contain the search term
Implementation (Lines 92-102)
public IEnumerable<Equipo> SearchEquipos(string nombre){ return _dataContext.Equipos .Include(e => e.Municipio) // Carga explicita de la propiedad Municipio .Include(e => e.DirectorTecnico) // Carga explicita de la propiedad DirectorTecnico .Include(e => e.Jugadores) // Carga explicita .Include(e => e.PartidosLocal) // Carga explicita .Include(e => e.PartidosVisitante) // Carga explicita .Where(e => e.Nombre.Contains(nombre)) .ToList();}
Key Features:
Uses .Contains() for partial string matching
Loads complete relationship graph
Case-sensitive search
Usage Example:
// Search for teams with "Atlético" in the namevar equiposAtleticos = repositorioEquipo.SearchEquipos("Atlético");Console.WriteLine($"Equipos encontrados: {equiposAtleticos.Count()}");foreach (var equipo in equiposAtleticos){ Console.WriteLine($" - {equipo.Nombre} ({equipo.Municipio?.Nombre})");}// Search for teams with "FC" in the namevar equiposFC = repositorioEquipo.SearchEquipos("FC");
This validation does NOT exclude the current entity when updating (unlike DirectorTecnico validation). Any team with a matching name will be flagged as duplicate.
Usage Example:
var nuevoEquipo = new Equipo{ Nombre = "Atlético Municipal"};if (repositorioEquipo.validateDuplicates(nuevoEquipo)){ Console.WriteLine("Error: Ya existe un equipo con este nombre");}else{ repositorioEquipo.AddEquipo(nuevoEquipo, idMunicipio: 3, idDT: 5); Console.WriteLine("Equipo creado exitosamente");}