Contenido del curso
Contenido del curso
Edgar Matias Candia Arguello
Luis Angel Cruz Ruiz
Jhoan Sebastián Lopera Gallego
Nicolás Urbano
Sergio Franco
Platzi Team
Leidy Ruiz
Miguel Teheran
Leonardo Valdivieso
Jhoan Sebastián Lopera Gallego
Alejandro Javier Zeballos Aguilar
Miguel Teheran
Rodrigo Rodenbeek
Miguel Teheran
Felipe Naranjo
Miguel Teheran
Facundo Oubel
Miguel Teheran
CHRISTIAN JAVIER CISNE TORREZ
Jonathan González
Diego Eduardo Téllez Contreras
Melvin Canté
Hans González
carlos augusto sabino cañizares
Carlos Madrigal Ramos
Juan Esteban Lopez Parra
Juan Esteban Lopez Parra
Jesus Maria Gonzalez Guardo
Miguel Teheran
Raúl Alejandro Chávez Valenzuela
Ivan David Martinez Baron
Miguel Teheran
me encanta esta clase, el profesor es rápido, conciso y directo, se nota que sabe lo que hace y su lógica de enseñanza y resolución de conflictos es impecable. 10/10 y espero que el profesor tenga más clases en la plataforma!
Confirmo!
Comparto tu opinión
Recuerden que este comando se puede usar para no tener que correr manualmente la api tras cada cambio
dotnet watch run
epa ! buen aporte !
Actualizando datos con Entity framework
app.MapPut("/api/tareas/{id}", async ([FromServices] HomeworkContext dbContext, [FromBody] Homework homeworks, [FromRoute] Guid id) => { var tarea = await dbContext.homeworks.FindAsync(id); if (tarea == null) { return Results.NotFound(); } tarea.Titulo = homeworks.Titulo; tarea.Descripcion = homeworks.Descripcion; tarea.PrioridadTarea = homeworks.PrioridadTarea; tarea.Resumen = homeworks.Resumen; tarea.CategoriaId = homeworks.CategoriaId; await dbContext.SaveChangesAsync(); return Results.Ok(tarea); });
Este es un código que representa una acción PUT en una aplicación web utilizando el framework ASP.NET Core. La acción está mapeada a la ruta "/api/tareas/{id}" y tiene como objetivo actualizar un registro en una base de datos de tareas.
La acción recibe como argumentos:
El código utiliza el método FindAsync() del contexto de Entity Framework para recuperar la tarea a actualizar. Si no se encuentra una tarea con el identificador especificado, se devuelve un resultado 404 (Not Found).
Si se encuentra una tarea con el identificador especificado, se actualizan sus propiedades con los valores proporcionados en el objeto homeworks y se guardan los cambios en la base de datos mediante el método SaveChangesAsync().
Finalmente, se devuelve un resultado 200 (Ok) junto con los datos actualizados de la tarea.
Hola muy bueno el curso que estas brindandonos pero queria saber hay alguna forma de agregar datos a las tablas sin tenerlo que hacer columna por columna? asi como lo muestras en el video anterior?
Para pasar los datos del objeto que vienen llegando al objeto destino lo que puedes hacer es usar una librería. Por ser fuertemente tipado C# no se comporta como JavaScript que permite fácilmente manipular los datos en objetos.
AutoMapper es una de las mejores para eso: https://docs.automapper.org/en/stable/Getting-started.html
O sea que obtenemos el objeto del Context, lo modificamos y después actualizamos el Context
Tal cual!
Hola! ¿Cuál seria la manera mas efectiva de hacer un bulk insert?
Lo ideal seria usar la clase de SQLClient (en el caso de SQL server) para hacer el bulk, obtendrias el mejor performance posible https://learn.microsoft.com/en-us/dotnet/api/system.data.sqlclient.sqlbulkcopy?redirectedfrom=MSDN&view=dotnet-plat-ext-6.0
de todas formas en una busqueda rápida encontre una extension opensource que ayuda hacerlo directamente en EF, pero nunca la he usado
Hola. ¿Por qué se usa plural en la búsqueda del id (Tareas en vez de Tarea) ?
var tareaActual = dbContext.Tareas.Find(id);
Tareas representa una colección de datos y por eso se coloca en plural, la tabla por normalización si debe ir en singular
ahí en que momento se actualiza el contexto?
no haría falta una linea antes de guardar el contexto como:
dbContext.update(tareaActual); ???
No es necesario por que traemos el valor actual en el contexto y cualquier cambio que se haga sobre esas entidades afectará los datos a menos que usemos el AsNoTracking en el método.
Se podria hacer en vez de buscarlo con Find() una busqueda con FindAsync()? Ej: var tareaActual = dbContext.FindAsinc(id);
Si correcto, se puede usar.
ya vi el problema. Faltaba agregar el id a la ruta:
app.MapPut("/api/tareas/{id}"
Excelente el curso, el profe se da a entender fácilmente !!
Noten que el profe mandó 5 datos en el body de la solicitud, pero realmente el dato que viene en fechaCreacion no está haciendo nada porque en el código lo recibimos pero nunca lo estamos asignando. Los unicos campos que estamos actualizando son CategoriaId, Titulo, PrioridadTarea y Descripción.
Cualquier dato adicional que mandemos en el body será irrelevante.
Excelente!!
Muy excelente clase
Excelente profesor. Por favor. que este profesor nos siga profundizando mas en el tema. Sabe hacer muy bien las explicaciones. Lo felicito.
Endpoint para modificar una Categoria
//Endpoint para modificar una Categoria app.MapPut("/api/categorias/{id}", async ([FromServices] TareasContext dbContext, [FromBody] Categoria categoria, [FromRoute] Guid id) => { var categoriaActual = dbContext.Categorias.Find(id); //el metodo find busca por la clave primaria if(categoriaActual != null) { categoriaActual.Nombre = categoria.Nombre; categoriaActual.Descripcion = categoria.Descripcion; categoriaActual.Peso = categoria.Peso; await dbContext.SaveChangesAsync(); return Results.Ok(); } return Results.NotFound(); });
tengo el codigo igual pero al omento de actualizar en postman colocando el id correcto me trae el error 404
cabe aclarar que si no determinamos la actualizacion de las propiedad en el codigo como
tareaActual.Titulo = tarea.Titulo;
al momento de actualizar en postman, no afectara el cambio
This is a modal window.The media playback was aborted due to a corruption problem or because the media used features your browser did not support.
Ah alguien mas le ha salido este problema durante la reproducción de video?
Creo que es un error de plugin en el navegador, pero no conozco, creo que el equipo de soporte de platzi te puede ayudar
¿Cómo manejamos casos donde no se provee uno o varios campos en el update?
Lo intenté y parece que se reciben valores default que no tuve manera práctica de revisar por null o vacío. Tuve que hacerlo campo a campo.
¿No hay una manera de hacer update y que automáticamente entienda que no se deben actualizar los valores no especificados?
¿Por que al intentar actualizar el campo de la categoría de la entidad Tarea me arroja error? Me imagino que debe ser por la relación de las tablas, algo así como una actualización en cascada? ¿Como se debería hacer? Gracias
al igual que en cualquier base de datos relacional es muy importante la integridad de los datos, si ahcemos cambios que afecten la integridad EF no va a permitirlo, tendriamos que hacer un backupd de esos datos primero, eliminarlos bajo nuestra responsabilidad y luego hacer los cambios que deseamos.