EntityFrameworkCore.Exceptions.MySQL
10.0.0
dotnet add package EntityFrameworkCore.Exceptions.MySQL --version 10.0.0
NuGet\Install-Package EntityFrameworkCore.Exceptions.MySQL -Version 10.0.0
<PackageReference Include="EntityFrameworkCore.Exceptions.MySQL" Version="10.0.0" />
<PackageVersion Include="EntityFrameworkCore.Exceptions.MySQL" Version="10.0.0" />
<PackageReference Include="EntityFrameworkCore.Exceptions.MySQL" />
paket add EntityFrameworkCore.Exceptions.MySQL --version 10.0.0
#r "nuget: EntityFrameworkCore.Exceptions.MySQL, 10.0.0"
#:package EntityFrameworkCore.Exceptions.MySQL@10.0.0
#addin nuget:?package=EntityFrameworkCore.Exceptions.MySQL&version=10.0.0
#tool nuget:?package=EntityFrameworkCore.Exceptions.MySQL&version=10.0.0
![]()
EntityFramework.Exceptions
Handle database errors easily when working with Entity Framework Core and ADO.NET. Supports SQLServer, PostgreSQL, SQLite, Oracle and MySql
Entity Framework Community Standup Live Show
OSS Power-Ups: EntityFramework.Exceptions
Nick Chapsas - The Smart Way to Handle EF Core Exceptions
Sponsors
A huge thanks to everyone (individuals or organisations) who have sponsored EntityFramework.Exceptions, but a massive thanks in particular to
- Entity Framework Extensions and Dapper Plus are major sponsors and are proud to contribute to the development of EntityFramework.Exceptions
- JetBrains is sponsoring the EntityFramework.Exceptions project as part of their OSS Power-Ups series
What does EntityFramework.Exceptions do?
When using Entity Framework Core for data access all database exceptions are wrapped in DbUpdateException. If you need to find
whether the exception was caused by a unique constraint, value being too long or value missing for a required column you need to dig into
the concrete DbException subclass instance and check the error code to determine the exact cause.
EntityFramework.Exceptions simplifies this by handling all the database specific details and throwing different exceptions. All you have
to do is to configure DbContext by calling UseExceptionProcessor and handle the exception(s) you need, such as UniqueConstraintException,
CannotInsertNullException, MaxLengthExceededException, NumericOverflowException, ReferenceConstraintException, or DeadlockException.
In case of UniqueConstraintException and ReferenceConstraintException you can get the name of the associated constraint with ConstraintName property. The ConstraintProperties will contain the properties that are part of the constraint.
ConstraintName and ConstraintProperties will be populated only if the index is defined in the Entity Framework Model. These properties will not be populated if the index exists in the database but isn't part of the model or if the index is added with MigrationBuilder.Sql method.
ConstraintName and ConstraintProperties will not be populated when using SQLite.
All these exceptions inherit from DbUpdateException for backwards compatibility.
How do I get started?
First, install the package corresponding to your database:
dotnet add package EntityFrameworkCore.Exceptions.SqlServer
dotnet add package EntityFrameworkCore.Exceptions.MySql
dotnet add package EntityFrameworkCore.Exceptions.MySql.Pomelo
dotnet add package EntityFrameworkCore.Exceptions.PostgreSQL
dotnet add package EntityFrameworkCore.Exceptions.Sqlite
dotnet add package EntityFrameworkCore.Exceptions.Oracle
Next, in your DbContext OnConfiguring method call UseExceptionProcessor extension method:
class DemoContext : DbContext
{
public DbSet<Product> Products { get; set; }
public DbSet<ProductSale> ProductSale { get; set; }
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<Product>().HasIndex(u => u.Name).IsUnique();
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseExceptionProcessor();
}
}
You will now start getting different exception for different database error. For example, when a unique constraints fails you will get UniqueConstraintException exception:
using (var demoContext = new DemoContext())
{
demoContext.Products.Add(new Product
{
Name = "demo",
Price = 10
});
demoContext.Products.Add(new Product
{
Name = "demo",
Price = 100
});
try
{
demoContext.SaveChanges();
}
catch (UniqueConstraintException e)
{
//Handle exception here
Console.WriteLine($"Unique constraint {e.ConstraintName} violated. Duplicate value for {e.ConstraintProperties[0]}");
}
}
If you want to use another native SQLite binary instead of e_sqlite3.dll use the EntityFrameworkCore.Exceptions.Sqlite.Core package. This package depends on Microsoft.Data.Sqlite.Core package, which doesn't include SQLite native binary so you can use any native binary you want.
Usage with DbContext pooling
Instead of calling UseExceptionProcessor in the OnConfiguring method, add it where you add your DbContextPool:
// Replace UseNpgsql with the sql flavor you're using
builder.Services.AddDbContextPool<DemoContext>(options => options
.UseNpgsql(config.GetConnectionString("DemoConnection"))
.UseExceptionProcessor());
DbExceptionClassifier
If you don't use Entity Framework Core, you can use the DbExceptionClassifier packages to classify ADO.NET database exceptions directly. They provide a unified IDbExceptionClassifier interface without any EF Core dependency.
dotnet add package DbExceptionClassifier.PostgreSQL
var classifier = new PostgreSQLExceptionClassifier();
try
{
await command.ExecuteNonQueryAsync();
}
catch (DbException ex) when (classifier.IsUniqueConstraintError(ex))
{
// Handle unique constraint violation
}
See the DbExceptionClassifier README for full documentation.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- DbExceptionClassifier.MySQL (>= 1.0.0)
- EntityFrameworkCore.Exceptions.Common (>= 10.0.0)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on EntityFrameworkCore.Exceptions.MySQL:
| Package | Downloads |
|---|---|
|
Identity.Module.API
A set of libraries to easily integrate and extend authentication in ASP.NET Core projects, using ASP.NET Core Identity. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 10.0.0 | 35 | 3/19/2026 |
| 8.1.3 | 77,933 | 8/3/2024 |
| 8.1.2 | 478 | 3/22/2024 |
| 8.1.1 | 272 | 3/21/2024 |
| 8.1.0 | 297 | 3/16/2024 |
| 8.0.0 | 5,643 | 12/11/2023 |
| 6.0.3 | 21,356 | 3/16/2022 |
| 3.1.4 | 8,996 | 2/12/2021 |
| 3.1.2 | 1,341 | 7/26/2020 |
| 3.1.1 | 1,122 | 1/22/2020 |
| 1.0.1 | 1,054 | 6/11/2019 |
| 1.0.0 | 1,368 | 1/23/2019 |
| 0.1.0-beta | 822 | 12/5/2018 |
- Update to .NET 10 and Entity Framework Core 10
- Add DeadlockException
- Map ORA-01407 to CannotInsertNullException