Cómo actualizar la entidad desconectada existente

entity-framework-core

Pregunta

Tengo este código que funciona en EntityFrameworkCore.

public void SaveProject(Project item)
    {
        var existing = _context.Projects.FirstOrDefault(a => a.Id == item.Id);
        existing.Description = item.Description;
        existing.IsArchived = item.IsArchived;
        existing.IsDeleted = item.IsDeleted;
        existing.Name = item.Name;
        _context.SaveChanges();

    }

Tomando una entidad desconectada, encontrándola en la base de datos y aplicando los cambios.

¿Hay una mejor manera de hacer esto?

Me gustaría no hacer una llamada a la base de datos. En otras palabras, me gustaría poder marcar la entidad como modificada y luego llamar a SaveChanges ().

¿Hay una manera de hacer eso?

Respuesta aceptada

Si está seguro de que ese elemento existe en la base de datos, puede usar el método Adjuntar de DbContext como sigue

public void SaveProject(Project item)
{
    _context.Projects.Attach(item);
    _context.Entity(item).State=EntityState.Modified;
    _context.SaveChanges();
}

Respuesta popular

En EntityFramework Core, ahora se puede hacer usando el método de actualización:

 DbContext.Update<Item>(item);
 this.SaveChanges();

En la versión 2.1, el método de actualización ahora se puede usar para entidades nuevas y existentes si la propiedad de identificación se genera automáticamente.

Los docs

La desventaja de esto es que todas las propiedades están marcadas como modificadas, incluso si son las mismas. El problema con esto es que si está registrando cambios en un desencadenante de base de datos, todas las propiedades se marcarán como modificadas, incluso cuando no lo estén. Si solo desea que se actualicen propiedades específicas, entonces necesita obtener la entidad de la base de datos, actualizarla como desee y luego guardarla.



Related

Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué