Eliminando datos con Entity framework
Clase 24 de 25 • Curso de Fundamentos de Entity Framework
Contenido del curso
Clase 24 de 25 • Curso de Fundamentos de Entity Framework
Contenido del curso
Jose Moreno Gomez
Hans González
Platzi Team
john fredy quimbaya orozco
Randall Chacón Sarmiento
Miguel Teheran
Santiago Vasquez
Sergio Sanchez
Miguel Teheran
Juan Sebastian Viazzo Perrone
Miguel Teheran
Raúl Alejandro Chávez Valenzuela
Lautaro Martinez
Junier Ayala Perez
Ronny Manuel De La Cruz Perez
Xavier Medina Veintimilla
Léster Rolando Cobón Picholá
Alexis David Sánchez Niaupari
Pueden agregar pequeños comentarios de confirmación como los siguientes así queda mas bonito:
return Results.Ok($"Se actualizo la tarea de nombre: {tareaActual.Titulo}"); //---------------------------------------------------- return Results.Ok($"Tarea con titulo: {tareaActualDelete.Titulo}, se elimino exitosamente");
Excelente aporte, me ayuda a ver mejor los eventos, saludos
Eliminando datos con Entity framework
app.MapDelete("/api/tareas/{id}", async ([FromServices] HomeworkContext dbContext, [FromRoute] Guid id) => { var tarea = await dbContext.homeworks.FindAsync(id); if (tarea == null) { return Results.NotFound(); } dbContext.homeworks.Remove(tarea); await dbContext.SaveChangesAsync(); return Results.Ok(tarea); });
Este código es parte de una aplicación de servidor web que utiliza el framework ASP.NET Core. En este caso, se define una ruta de borrado para una tarea específica en un API RESTful.
MapDelete y se accede a través del endpoint /api/tareas/{id}, donde {id} es una variable que se reemplaza con el identificador único de la tarea a borrar.[FromServices] HomeworkContext dbContext indica que se está inyectando una instancia del contexto de base de datos en la función anónima. Esto se logra mediante el contenedor de dependencias de ASP.NET Core.[FromRoute] Guid id indica que se está obteniendo el identificador de la tarea a borrar de la ruta de la solicitud.await dbContext.homeworks.FindAsync(id) para buscar la tarea a borrar en la base de datos. Si la tarea no se encuentra, se devuelve un resultado Results.NotFound(). De lo contrario, se elimina la tarea llamando al método dbContext.homeworks.Remove(tarea). Finalmente, se guardan los cambios en la base de datos llamando a await dbContext.SaveChangesAsync() y se devuelve un resultado Results.Ok(tarea) que contiene la tarea borrada.cabe resaltar que en una base de datos algunos datos se les hace borrado logíco y no físico
Si el Guid se le quitan o agregan números la respuesta es un 400 Bad Request, ¿como podría gestionar este caso?
Correcto, puedes agregar la validación usando Guid.Parse o Guid.TryParse y comprobar que el Guid es valido y sino lo es entonces retornar un badrequest
Esta es mi forma de actualizar las CATEGORÍAS.
<//Para ACTUALIZAR CATEGORIAS datos de una Base de Datos. app.MapPut("/api/categorias/{id}", async ([FromServices] TareasContext dbContext, [FromBody] Categoria categoria, [FromRoute] Guid id) => { //El método FIND, busca por la que esté marcada como KEY en el modelo. var categoriaActual = dbContext.Categorias.Find(id); if (categoriaActual != null) { //categoriaActual.CategoriaId = categoria.CategoriaId; categoriaActual.Nombre = categoria.Nombre; categoriaActual.Peso = categoria.Peso; categoriaActual.Descripcion = categoria.Descripcion; await dbContext.SaveChangesAsync(); return Results.Ok("Se realizó la ACTUALIZACIÓN de la CATEGORÍA de manera correcta"); } return Results.NotFound(); });>
Entiendo que para usar asincronismo, se debe complementar un Async con un Await, Y ademas la funcion a usar con la palabra Async al final, es correcto?
Por Ejemplo, aca se usa (es Asincrono):
var tareaFromDb = await dbContext.Tareas.FindAsync(id);
Aca no (es Sincrono):
var tareaFromDb = dbContext.Tareas.Find(id);
es correcto lo de arriba? o me pierdo en algo?
Esta pefecto así es como dices
Profesor, consulta, sirve usar dentro del scope del endpoint, un trycatch? puede haber alguna excepcion?
Si estas usando EF en aplicaciones de escritorio si esta perfecto usar el trycatch. Para web apis es mejor utilizar un middleware o algo generico para controlar los errores, en teoria no tiene por que haber error. Colocar muchos try catch es una mala práctica. https://learn.microsoft.com/en-us/aspnet/core/fundamentals/error-handling?view=aspnetcore-7.0
¿Qué es buena práctica? ¿Misma ruta con diferente instrucción?
GET /api/{id}
DELETE /api/{id}
¿O rutas separadas?
GET /api/{id}
DELETE /api/delete/{id}
es normal utilizar el mismo endpoint pero con diferentes verbos HTTP
CODIGO
app.MapDelete("/api/tareas/{tareaId}", async ([FromServices] TareasContext dbContext, [FromRoute] Guid tareaId) =>
{
var tarea = dbContext.Tareas.Find(tareaId);
if (tarea == null)
{
return Results.NotFound("La tarea no fue encontrada");
}
dbContext.Tareas.Remove(tarea);
await dbContext.SaveChangesAsync();
return Results.Ok();
});
Cuando o el dotnet para el delete me da error y te go todo bien como lo tiene el profesor
¡Hola! :D
¿Cuál es el problema que tienes?, ¿en qué te puedo ayudar? Compártenos tu código por favor. Puedes adjuntar imágenes arrastrándolas a esta ventana de comentario.
Nunca pares de aprender 💚
Error de System.NotSupportedException: Serialization and deserialization of 'System.Func`2[[System.Object, System.Private Si te ocurre esto es algo ridiculamente sutil lo que ocurre. En el codigo no estas poniendo los parentesis en alguno de los results sea
return Results.Ok; //En su lugar solo agrega los parentesis y todo estara bien