Franklin Gil
EstudianteKEVIN A. DERAS
EstudiantePablo Lopera
EstudiantePlatzi Team
Estudiantecromero207
EstudianteFranklin Gil
EstudianteMiguel Teheran
ProfesorMarcos Lanuza
EstudianteVICTOR CAUDILLO
EstudianteMiguel Teheran
ProfesorSergio Sanchez
EstudianteMiguel Teheran
ProfesorJesus Maria Gonzalez Guardo
Estudiantekolab Linkear
EstudianteLuis Eduardo Chaparro roa
EstudianteMiguel Teheran
ProfesorKaren Lisbeth Gelvez Lesmes
EstudianteMiguel Teheran
ProfesorFacundo Oubel
EstudianteMiguel Teheran
ProfesorNestor Fabian Peña Estrella
EstudianteMiguel Teheran
ProfesorMathías Cabrera
EstudianteJaime Betancur
EstudianteIvan David Martinez Baron
EstudianteMiguel Teheran
ProfesorCarlos Gomez
EstudianteMiguel Teheran
ProfesorCarlos Andrés Castro Moreno
EstudianteMiguel Teheran
ProfesorJose Roque
EstudianteJose Roque
EstudianteSi no se usa el await, no es necesario el async
Efectivamente, incluso VSC te da una advertencia
A mí me pasó que si no le daba el async, cuando hacía el llamado en postman, no "esperaba" los datos, y acaba devolviendo nada.
Obteniendo datos con Entity Framework
Entity Framework es un ORM que permite a los desarrolladores interactuar con una base de datos mediante código en lugar de escribir manualmente sentencias SQL. Con Entity Framework, puedes obtener datos de una base de datos
app.MapGet("/api/tareas", async ([FromServices] HomeworkContext dbContext) => { var tareas = await dbContext.homeworks.Include(p => p.Category).ToListAsync(); return Results.Ok(tareas); });
El código anterior muestra una implementación de una ruta de API REST que retorna una lista de tareas. La ruta se define como "/api/tareas" y está asociada con una función anónima que se invoca cuando la ruta se activa.
HomeworkContext, que es una instancia de la clase DbContext, para obtener información de la base de datos. En este caso, se utiliza el método "Include" para incluir la entidad relacionada "Category" con cada tarea. Luego, se utiliza el método "ToListAsync" para ejecutar la consulta y retornar la lista de tareas.Where()Tutorial de como crear un minimal web API en ASP NET Core: https://docs.microsoft.com/en-us/aspnet/core/tutorials/min-web-api?view=aspnetcore-6.0&tabs=visual-studio
Que hace el [FromServices]?
Permite traer la dependencia que que este configurada para ese servicio
Hice tres filtros anidados:
return Results.Ok(dbContext.Tareas .Include(p => p.Categoria) .Where(p => p.PrioridadTarea == Prioridad.Alta) .Where(p => p.FechaCreacion < DateTime.Today) .Where(p => p.NivelUrgencia == Urgencia.Urgente));
Cuando recueperamos data de la base de datos y luego implementamos LINQ.
Me queda duda si esto impacta a nivel de optimización de velocidad de consultas, ya que si primero recuperamos toda la información de la DB y luego filtramos, siento que podria ser trabajo delegado al motor del DB pero no se a fondo como funcione LINQ
Nop, linq no funciona de esa manera. resulta que existe un concepto llamado LazyLoading a pesar que estas lanzand diferentes queries en la BD estos se estan armando por debejo y solo en tiempo de ejecucion se traen datos o cuando utilizas el metodod ToList() en ese momento se carga la info por eso se recomienda no usar ToList() sino hasta el final donde realmente necesitamos los datos
Es recomendado en este tipo de construcciones (APIs), usar asincronismo cuando se consulta la base de datos? (Async/await)
Creo que es una buena practica (en el mundo js es increiblemente usado), pero tengo la duda si es usando en la industria dotnet.
si claro es una excelente práctica ayuda a mejorar el rendimiento sobretodo en caso de alta demanda
Like si te "asustaste" por que viste más de dos registros y no te acordabas que habias creado otros registros como tarea!!!
Así sería su versión async
Entiendo que para el caso la variable dbContext tiene almacenado la colección de datos que fue detallada en la clase TareasContext a su respectiva cadena de conexión.
Pregunta: Si la colección de datos resultado estuviera en el orden de Millones de registros, ¿podría indicarle a EF antes de traer los datos que al conectarse a la BD me trajera solo los datos con un filtro de fecha? En lugar de traerse todos los datos existentes
Todas la configuración que hay en TareasContext incluyendo los modelos es solo una presentación de lo hay en la base de datos no la base de datos en sí ni tampoco los datos. Cuando usamos EF con Linq este utiliza LazyLoading (carga floja) para traer los datos de esta manera los datos nunca están en memoria ni se traen sino al final del request o cuando usemos el método ToList()
¿Con que instrucción se detiene la ejecución en la terminal para ejecutarla nuevamente?
CONTROL + C
No es mala practica agregar los endpoints en Program.cs en vez de en un controller?
En este caso no es mala practica por que estamos usando Minimal API este es el enfoque del template
Que pasa si quiero incluir otra subcolumna que es virtual dentro de categoría pero que no es tarea, ejemplo:
[Tarea { campoT1, campoT2, Categoría{ campoC1, campoC2, CampoC3, Etiquetas { campoE1, campoE2 } } }
sería Include.Include?
Se usa el ThenInclude:
using Microsoft.EntityFrameworkCore;
query.Include(x => x.Collection) .ThenInclude(x => x.Property);
Pequeño aporte, para finalizar la ejecución del proyecto podemos presionar Ctrl + C en la terminal.
Voy a aclarar, los await se usan cuando un metodo es asincrono "async" el awaiter es requerido para no bloquear el proceso, hay un comentario inverso aqui, si el proceso no es asincrono no es necesario el await
Como se haría para seguir navegando por mas tablas? Pensaría en dos opciones, la primera es crear 2 consultas con ef usando el include en la nueva tabla que deseo agregar o como segunda opción se podría usar un include sobre el ultimo include?
Usamos primero el Include y luego el ThenInclude
Se podría obtener la lista de categorías pero que contenga todas las tareas con las que se le relaciona?
Si se puede, haciendo el include de tareas al obtener las catgorias.
No entiendo el error por incluir la lista de tareas, es algo asi como la redundancia ciclica?
Si correcto es un ciclo infinito donde EF trata de agregar la dependencia del hijo y la dependencia del padre ene le hijo todo el tiempo y nunca acaba
Así quedo al final este nuevo EndPoint
app.MapGet("/api/tareas", async([FromServices] TareasContext dbcontext)=>{ return Results.Ok( await dbcontext .Tareas.Include(t=>t.Categoria) .Where(x=>x.PrioridadTarea == Prioridad.Baja || x.PrioridadTarea == Prioridad.Media) .ToListAsync()); });
para implementar Tareas, sale
app.MapGet("/api/tareas", async([FromServices] TareasContext dbcontext)=>{ return Results.Ok( await dbcontext .Tareas .ToListAsync()); });