Skip to content

Commit 1157255

Browse files
committed
Fix processor for DbCommandInterceptor
1 parent 850a203 commit 1157255

File tree

2 files changed

+19
-4
lines changed

2 files changed

+19
-4
lines changed

EntityFramework.Exceptions.Common/ExceptionFactory.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using Microsoft.EntityFrameworkCore;
22
using System;
33
using System.Collections.Generic;
4+
using System.Data.Common;
45
using Microsoft.EntityFrameworkCore.ChangeTracking;
56

67
namespace EntityFramework.Exceptions.Common;
@@ -24,4 +25,17 @@ internal static Exception Create(DatabaseError error, DbUpdateException exceptio
2425
_ => null,
2526
};
2627
}
28+
29+
internal static Exception Create(DatabaseError error, DbException exception)
30+
{
31+
return error switch
32+
{
33+
DatabaseError.CannotInsertNull => new CannotInsertNullException("Cannot insert null", exception.InnerException),
34+
DatabaseError.MaxLength => new MaxLengthExceededException("Maximum length exceeded", exception.InnerException),
35+
DatabaseError.NumericOverflow => new NumericOverflowException("Numeric overflow", exception.InnerException),
36+
DatabaseError.ReferenceConstraint => new ReferenceConstraintException("Reference constraint violation", exception.InnerException),
37+
DatabaseError.UniqueConstraint => new UniqueConstraintException("Unique constraint violation", exception.InnerException),
38+
_ => null,
39+
};
40+
}
2741
}

EntityFramework.Exceptions.Common/ExceptionProcessorDbCommandInterceptor.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using System.Linq;
88
using System.Threading;
99
using System.Threading.Tasks;
10+
using Microsoft.EntityFrameworkCore.ChangeTracking;
1011

1112
namespace EntityFramework.Exceptions.Common;
1213

@@ -20,7 +21,7 @@ public abstract class ExceptionProcessorDbCommandInterceptor<T> : DbCommandInter
2021
/// <inheritdoc />
2122
public override void CommandFailed(DbCommand command, CommandErrorEventData eventData)
2223
{
23-
ProcessException(eventData, eventData.Exception as DbUpdateException);
24+
ProcessException(eventData, eventData.Exception as DbException);
2425

2526
base.CommandFailed(command, eventData);
2627
}
@@ -29,21 +30,21 @@ public override void CommandFailed(DbCommand command, CommandErrorEventData even
2930
public override Task CommandFailedAsync(DbCommand command, CommandErrorEventData eventData,
3031
CancellationToken cancellationToken = new CancellationToken())
3132
{
32-
ProcessException(eventData, eventData.Exception as DbUpdateException);
33+
ProcessException(eventData, eventData.Exception as DbException);
3334

3435
return base.CommandFailedAsync(command, eventData, cancellationToken);
3536
}
3637

3738
[StackTraceHidden]
38-
private void ProcessException(CommandErrorEventData eventData, DbUpdateException dbUpdateException)
39+
private void ProcessException(CommandErrorEventData eventData, DbException dbUpdateException)
3940
{
4041
if (dbUpdateException == null || eventData.Exception.GetBaseException() is not T providerException) return;
4142

4243
var error = GetDatabaseError(providerException);
4344

4445
if (error == null) return;
4546

46-
var exception = ExceptionFactory.Create(error.Value, dbUpdateException, dbUpdateException.Entries);
47+
var exception = ExceptionFactory.Create(error.Value, dbUpdateException);
4748

4849
switch (exception)
4950
{

0 commit comments

Comments
 (0)