Tutorials Entity Framework Core Tutorial
SaveChanges Lifecycle in EF Core
SaveChanges Lifecycle in EF Core: free step-by-step lesson with examples, common mistakes, and interview tips — part of Entity Framework Core Tutorial on Toolliyo Academy.
On this page
Entity Framework Core Tutorial · Lesson 10 of 100
SaveChanges Lifecycle in EF Core
Beginner → Intermediate → Advanced → Professional
Beginner · 1 — Foundations · ~6 min · Module 1: EF Core Fundamentals
What is this?
SaveChangesAsync walks tracked entities, orders commands (INSERT/UPDATE/DELETE), opens a transaction, sends SQL to SQL Server, and commits — or rolls back on failure.
Why should you care?
Placing an ShopNest order must insert Order and OrderItems together; SaveChangesAsync is the atomic batch boundary for that graph.
See it live — copy this example
Paste into a .NET project with EF Core packages, then run with LocalDB/SQL Server (dotnet ef / dotnet run).
var order = new Order
{
CustomerId = 12,
OrderDate = DateTime.UtcNow,
Items =
{
new OrderItem { ProductId = 3, Quantity = 1, UnitPrice = 799 },
new OrderItem { ProductId = 7, Quantity = 2, UnitPrice = 299 }
}
};
_context.Orders.Add(order);
await _context.SaveChangesAsync(); // parent INSERT then children with FK
What happened?
- Add marks the whole graph Added.
- EF inserts Order first to obtain identity Id, then OrderItems referencing OrderId — one transaction by default.
Practice next
- Save a parent with two children in one call and capture SQL log order.
- Break a required FK intentionally and read DbUpdateException details.
- Avoid SaveChangesAsync inside loops — batch once per business operation.
- Wrap SaveChangesAsync in an explicit transaction and commit manually to see equivalence.
- Set order.OrderDate in UTC and verify datetime column in SSMS after save.
Remember
SaveChangesAsync wraps commands in a transaction. Parent-child inserts respect FK order automatically. One save per use case improves throughput.
ShopNest checkout commit
Checkout adds Order plus line items then calls SaveChangesAsync once before payment capture.
Outcome: Customers never get charged for orders missing line items in the database.
Interview prep for this lesson
Practice these questions aloud after reading—each links to a full structured answer.
Sign in to ask a question or upvote helpful answers.
No questions yet — be the first to ask!