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?
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();
}
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With