The IRepositorioMunicipio interface and RepositorioMunicipio implementation provide data access operations for managing municipalities. Municipalities are associated with teams (Equipos) in the system.
using Torneo.App.Dominio;namespace Torneo.App.Persistencia{ public interface IRepositorioMunicipio { public Municipio AddMunicipio(Municipio municipio); public IEnumerable<Municipio> GetAllMunicipios(); public Municipio GetMunicipio(int idMunicipio); public Municipio UpdateMunicipio(Municipio municipio); public Municipio DeleteMunicipio(int idMunicipio); public bool validateDuplicates(Municipio nombreMunicipio); }}
using Microsoft.EntityFrameworkCore;using Torneo.App.Dominio;namespace Torneo.App.Persistencia{ public class RepositorioMunicipio : IRepositorioMunicipio { private DataContext _dataContext = new DataContext(); // Implementation methods... }}
The inserted Municipio entity with its generated ID
Implementation (Lines 8-13)
public Municipio AddMunicipio(Municipio municipio){ var municipioInsertado = _dataContext.Municipios.Add(municipio); _dataContext.SaveChanges(); return municipioInsertado.Entity;}
Usage Example:
var nuevoMunicipio = new Municipio{ Nombre = "Medellín"};var municipioCreado = repositorioMunicipio.AddMunicipio(nuevoMunicipio);Console.WriteLine($"Municipio creado: {municipioCreado.Nombre} (ID: {municipioCreado.Id})");
Collection of all Municipio entities with eagerly loaded Equipos
Implementation (Lines 14-26)
public IEnumerable<Municipio> GetAllMunicipios(){ var municipios = _dataContext.Municipios .Include(m => m.Equipos) .AsNoTracking() .ToList(); return municipios;}
Key Features:
Uses .Include(m => m.Equipos) to eagerly load teams
Uses .AsNoTracking() for improved read performance
Returns complete object graph including teams
Usage Example:
var todosMunicipios = repositorioMunicipio.GetAllMunicipios();foreach (var municipio in todosMunicipios){ Console.WriteLine($"Municipio: {municipio.Nombre}"); Console.WriteLine($" Equipos: {municipio.Equipos.Count()}"); foreach (var equipo in municipio.Equipos) { Console.WriteLine($" - {equipo.Nombre}"); }}
public Municipio GetMunicipio(int idMunicipio){ var municipioEncontrado = _dataContext.Municipios.Find(idMunicipio); return municipioEncontrado == null ? null : municipioEncontrado;}
Usage Example:
var municipio = repositorioMunicipio.GetMunicipio(5);if (municipio != null){ Console.WriteLine($"Municipio encontrado: {municipio.Nombre}");}else{ Console.WriteLine("Municipio no encontrado");}
Throws exception with message “Municipio not found” if the ID doesn’t exist
Implementation (Lines 32-44)
public Municipio UpdateMunicipio(Municipio municipio){ var municipioEncontrado = _dataContext.Municipios.Find(municipio.Id); if (municipioEncontrado != null) { municipioEncontrado.Nombre = municipio.Nombre; _dataContext.SaveChanges(); } else { Console.WriteLine("No se encontró el municipio"); } return municipioEncontrado ?? throw new Exception("Municipio not found");}
Updated Properties:
Nombre - Municipality name
Usage Example:
var municipio = repositorioMunicipio.GetMunicipio(5);if (municipio != null){ municipio.Nombre = "Medellín - Antioquia"; try { var municipioActualizado = repositorioMunicipio.UpdateMunicipio(municipio); Console.WriteLine($"Municipio actualizado: {municipioActualizado.Nombre}"); } catch (Exception ex) { Console.WriteLine($"Error: {ex.Message}"); }}
Throws exception with message “Municipio not found” if the ID doesn’t exist
Implementation (Lines 45-57)
public Municipio DeleteMunicipio(int idMunicipio){ var municipioEncontrado = _dataContext.Municipios.Find(idMunicipio); if (municipioEncontrado != null) { _dataContext.Municipios.Remove(municipioEncontrado); _dataContext.SaveChanges(); } else { Console.WriteLine("No se encontró el municipio"); } return municipioEncontrado ?? throw new Exception("Municipio not found");}
Deleting a municipality will fail if it has associated teams due to foreign key constraints configured with DeleteBehavior.Restrict. Remove all teams from the municipality before deleting.
Usage Example:
try{ var municipioEliminado = repositorioMunicipio.DeleteMunicipio(5); Console.WriteLine($"Municipio eliminado: {municipioEliminado.Nombre}");}catch (DbUpdateException){ Console.WriteLine("No se puede eliminar: el municipio tiene equipos asociados");}catch (Exception ex){ Console.WriteLine($"Error: {ex.Message}");}
Excludes current municipality when updating (checks municipio.Id != municipioIngresado.Id)
Returns false on any exception
Usage Example:
var nuevoMunicipio = new Municipio{ Nombre = "Medellín"};if (repositorioMunicipio.validateDuplicates(nuevoMunicipio)){ Console.WriteLine("Error: Ya existe un municipio con este nombre");}else{ repositorioMunicipio.AddMunicipio(nuevoMunicipio); Console.WriteLine("Municipio creado exitosamente");}
// 1. Create entityvar municipio = new Municipio{ Nombre = "Medellín"};// 2. Validate duplicatesif (!repositorioMunicipio.validateDuplicates(municipio)){ // 3. Add to database var resultado = repositorioMunicipio.AddMunicipio(municipio); Console.WriteLine($"Municipio creado con ID: {resultado.Id}");}else{ Console.WriteLine("Ya existe un municipio con este nombre");}
var todosMunicipios = repositorioMunicipio.GetAllMunicipios();Console.WriteLine("Municipios y sus equipos:");Console.WriteLine("=========================\n");foreach (var municipio in todosMunicipios.OrderBy(m => m.Nombre)){ Console.WriteLine($"{municipio.Nombre}"); Console.WriteLine($" Total equipos: {municipio.Equipos.Count()}"); if (municipio.Equipos.Any()) { Console.WriteLine(" Equipos:"); foreach (var equipo in municipio.Equipos) { Console.WriteLine($" - {equipo.Nombre}"); } } Console.WriteLine();}
Finding Municipalities Without Teams
var todosMunicipios = repositorioMunicipio.GetAllMunicipios();var municipiosSinEquipos = todosMunicipios .Where(m => !m.Equipos.Any()) .OrderBy(m => m.Nombre) .ToList();if (municipiosSinEquipos.Any()){ Console.WriteLine("Municipios sin equipos:"); foreach (var municipio in municipiosSinEquipos) { Console.WriteLine($" - {municipio.Nombre} (ID: {municipio.Id})"); }}else{ Console.WriteLine("Todos los municipios tienen al menos un equipo");}
Both UpdateMunicipio and DeleteMunicipio throw exceptions when the entity is not found. Always handle these exceptions:
try{ var resultado = repositorioMunicipio.UpdateMunicipio(municipio);}catch (Exception ex){ // Handle "Municipio not found" exception Console.WriteLine($"Error: {ex.Message}");}