¿Cuál es la diferencia entre ' _context.Entry(entity).State = EntityState.Modified ' y ' _context.Entity.Update(entity) ' en ASP.NET EF Core? Por ejemplo:
[HttpPut] public async Task<ActionResult<Student>> PutStudent(Student student) { _context.Entry(student).State = EntityState.Modified; await _context.SaveChangesAsync(); return student; } [HttpPut] public async Task<ActionResult<Student>> PutStudent(Student student) { _context.Student.Update(student); await _context.SaveChangesAsync(); return student; }Establecer el estado de una entidad en Modified marcará todas las propiedades escalares de la entidad como modificadas, lo que significa que SaveChanges generará una declaración de actualización que actualizará todos los campos de la tabla asignada, excepto los campos clave.
No se pregunta, pero una sola propiedad también se puede marcar como Modified :
_context.Entry(student).Property(s => s.Name).IsModified = true;Esto también establecerá el estado de la entidad como modificado.
El método de Update es bastante diferente, consulte los documentos :
Comienza a rastrear la entidad dada (...)
Para los tipos de entidad con claves generadas, si una entidad tiene establecido su valor de clave principal, se rastreará en el estado Modificado. Si el valor de la clave principal no está establecido, se rastreará en el estado Agregado. Esto ayuda a garantizar que se insertarán nuevas entidades, mientras que las entidades existentes se actualizarán. Se considera que una entidad tiene establecido su valor de clave principal si la propiedad de la clave principal se establece en cualquier valor que no sea el valor predeterminado de CLR para el tipo de propiedad.
Esto puede ser muy conveniente en escenarios desconectados en los que se adjuntan entidades nuevas y actualizadas a un contexto. EF averiguará qué entidades se Added y cuáles se Modified .
Otra diferencia es que el método Update también atraviesa entidades anidadas. Por ejemplo, si Exams es una colección en la clase Student , actualizar un Student también marcará sus Exams como Modified o Added donde sus claves no están configuradas.
No está documentado, pero vale la pena mencionarlo, si un Student y sus Exams se adjuntan como Unchanged , entonces el método Update solo establecerá el estado del Student en Modified , no los Exams .