How to Update Existing Disconnected Entity

entity-framework-core

Question

I have this code which works 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();

    }

It taking a disconnected entity, finding it in the database, and applying the changes.

Is there a better way to do this?

I would like to not make a call to the database. In other words, I would like to be able to mark the entity as modified, and then call SaveChanges().

Is there a way to do that?

Accepted Answer

If you are certain that item exist in database, you can use Attach method of DbContext As following

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

Popular Answer

In EntityFramework Core, it can now be done using the Update method:

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

In version 2.1, the Update method can now be used for both new and existing entities if the Id property is auto-generated.

The Docs

The downside to this is that all properties are marked as modified, even if they are the same. The issue with this is that if you are logging changes in a database trigger, then every property will be flagged as changed, even when they are not. If you only want specific properties updated, then you need to get the entity from the database, update as desired, then save.



Related

Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Is this KB legal? Yes, learn why
Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Is this KB legal? Yes, learn why