Tutorials Entity Framework Core Tutorial
Error Handling in EF Core
Error Handling 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 30 of 100
Error Handling in EF Core
Beginner ✓ → Intermediate → Advanced → Professional
Intermediate · 2 — Data & queries · ~6 min · Module 3: CRUD Operations
What is this?
EF Core throws typed exceptions — DbUpdateException, DbUpdateConcurrencyException — when saves fail. Catch them to translate SQL errors into user-friendly API responses and logs.
Why should you care?
ShopNest checkout must show "Out of stock" not "Violation of FK constraint FK_Order_Product" when inventory rules fail.
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).
try
{
await _context.SaveChangesAsync(ct);
}
catch (DbUpdateConcurrencyException ex)
{
_logger.LogWarning(ex, "Product {Id} changed by another user", productId);
return Conflict("Product was updated elsewhere. Refresh and retry.");
}
catch (DbUpdateException ex) when (ex.InnerException is SqlException sql && sql.Number == 547)
{
return BadRequest("Cannot delete — related orders exist.");
}
What happened?
- DbUpdateConcurrencyException signals row version mismatch on optimistic concurrency.
- SqlException number 547 is FK violation — map to business message.
Practice next
- Add RowVersion to Product for concurrency demo.
- Catch DbUpdateConcurrencyException and return 409 Conflict.
- Log full exception server-side; return safe message to clients.
- Enable EnableDetailedErrors in development only for richer logs.
- Simulate concurrency by updating same row in two SSMS tabs.
Remember
DbUpdateException wraps SQL errors from SaveChanges. Concurrency exceptions need merge or refresh UX. Map SQL error numbers to domain messages.
ShopNest optimistic checkout
Two shoppers buy last unit — second SaveChanges gets concurrency conflict mapped to friendly message.
Outcome: Customer sees retry prompt instead of 500 error page.
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!