Come aggiornare l'entità disconnessa esistente

entity-framework-core

Domanda

Ho questo codice che funziona in 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();

    }

Sta prendendo un'entità disconnessa, trovandola nel database e applicando le modifiche.

C'è un modo migliore per farlo?

Mi piacerebbe non effettuare una chiamata al database. In altre parole, vorrei poter contrassegnare l'entità come modificata, quindi chiamare SaveChanges ().

C'è un modo per farlo?

Risposta accettata

Se si è certi che l'elemento esiste nel database, è possibile utilizzare il metodo Attach di DbContext come segue

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

Risposta popolare

In EntityFramework Core, ora può essere eseguito utilizzando il metodo di aggiornamento:

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

Nella versione 2.1, il metodo di aggiornamento può ora essere utilizzato sia per le entità nuove che per quelle esistenti se la proprietà Id viene generata automaticamente.

I documenti

Lo svantaggio di questo è che tutte le proprietà sono contrassegnate come modificate, anche se sono le stesse. Il problema è che se si registrano le modifiche in un trigger di database, tutte le proprietà verranno contrassegnate come modificate, anche quando non lo sono. Se si desidera aggiornare solo proprietà specifiche, è necessario richiamare l'entità dal database, aggiornarla come desiderato, quindi salvare.



Related

Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché