Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to update record using Entity Framework Core?

What is the best approach to update database table data in Entity Framework Core?

  1. Retrieve the table row, do the changes and save
  2. Use keyword Update in DB context and handle exception for item not exist

What are the improved features we can use over EF6?

like image 858
CuriousGuy Avatar asked Oct 10 '17 02:10

CuriousGuy


1 Answers

To update an entity with Entity Framework Core, this is the logical process:

  1. Create instance for DbContext class
  2. Retrieve entity by key
  3. Make changes on entity's properties
  4. Save changes

Update() method in DbContext:

Begins tracking the given entity in the Modified state such that it will be updated in the database when SaveChanges() is called.

Update method doesn't save changes in database; instead, it sets states for entries in DbContext instance.

So, We can invoke Update() method before to save changes in database.

I'll assume some object definitions to answer your question:

  1. Database name is Store

  2. Table name is Product

Product class definition:

public class Product {     public int? ProductID { get; set; }          public string ProductName { get; set; }          public string Description { get; set; }          public decimal? UnitPrice { get; set; } } 

DbContext class definition:

public class StoreDbContext : DbContext {     public DbSet<Product> Products { get; set; }          protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)     {         optionsBuilder.UseSqlServer("Your Connection String");          base.OnConfiguring(optionsBuilder);     }          protected override void OnModelCreating(ModelBuilder modelBuilder)     {         modelBuilder.Entity<Order>(entity =>         {             // Set key for entity             entity.HasKey(p => p.ProductID);         });                  base.OnModelCreating(modelBuilder);     } } 

Logic to update entity:

using (var context = new StoreDbContext()) {         // Retrieve entity by id         // Answer for question #1         var entity = context.Products.FirstOrDefault(item => item.ProductID == id);                  // Validate entity is not null         if (entity != null)         {             // Answer for question #2              // Make changes on entity             entity.UnitPrice = 49.99m;             entity.Description = "Collector's edition";                          /* If the entry is being tracked, then invoking update API is not needed.                The API only needs to be invoked if the entry was not tracked.                https://www.learnentityframeworkcore.com/dbcontext/modifying-data */             // context.Products.Update(entity);                          // Save changes in database             context.SaveChanges();         } } 
like image 179
H. Herzl Avatar answered Sep 29 '22 20:09

H. Herzl