Extensiones útiles
Crono incluye numerosos métodos de extensión para trabajar con el DbContext, los DbSet y el rastreador de cambios de forma más cómoda (Crono.Datos.Extensiones).
Extensiones de DbSet
| Método | Descripción |
|---|---|
BuscarPorIdAsync(id, rastreado = true) | Busca una entidad por su id. Si ya está rastreada por el contexto, se devuelve de inmediato sin consultar la base de datos; si no, se consulta. Con rastreado: true la entidad queda adjunta al contexto. |
ObtenerVariosAsync(ids) | Carga muchas entidades ordenadas según la secuencia de ids indicada (el orden se aplica en memoria). |
EliminarTodosAsync() | Trunca/borra la tabla del tipo de entidad. |
ObtenerDbContexto() | Resuelve la instancia de DbContext de la que proviene un DbSet. |
// Devuelve la entidad rastreada si ya está en memoria; si no, consulta la BD
var prestamo = await _db.Prestamos.BuscarPorIdAsync(prestamoId);
// Solo lectura (sin rastreo)
var prestamo = await _db.Prestamos.BuscarPorIdAsync(prestamoId, rastreado: false);
Extensiones de DbContext
Entre las más útiles:
CargarColeccionAsync/CargarReferenciaAsync— cargan una propiedad de navegación (colección o referencia) desde la base de datos, salvo que ya esté cargada.- Estado de navegación — comprobar si una colección o referencia ya se cargó (ansiosa o diferidamente) antes de acceder a ella.
- Conexión — abrir y retener la conexión hasta el fin del ámbito, para ganar algo de velocidad en procesos largos (ver también DbContextoAmbito).
Rastreador de cambios
Las extensiones del change tracker (ChangeTrackerExtensiones, EntityEntryExtensiones) ayudan a inspeccionar el estado de las entidades:
- Comprobar si hay cambios pendientes (alguna entidad en estado
Agregado,ModificadooEliminado). - Obtener las propiedades modificadas de una entidad y su valor original (útil dentro de un interceptor PreGuardado; ver Interceptores).
- Cambiar el estado de una entidad, desasociarla del contexto o recargarla desde la base de datos sobrescribiendo sus valores.
info
Estas extensiones evitan reescribir código repetitivo de EF y hacen las consultas y operaciones más legibles. Combínalas con las extensiones de consulta (*ConsultaExtensiones) para encapsular filtros reutilizables (ver Acceso a datos).