From 0e129535aeaf2b96c0f573a64ede6d26aa3aea80 Mon Sep 17 00:00:00 2001 From: Giorgi Dalakishvili Date: Tue, 6 Aug 2024 19:03:37 +0400 Subject: [PATCH] Extract common code --- .../ExceptionProcessorInterceptor.cs | 35 ++++++------------- 1 file changed, 10 insertions(+), 25 deletions(-) diff --git a/EntityFramework.Exceptions.Common/ExceptionProcessorInterceptor.cs b/EntityFramework.Exceptions.Common/ExceptionProcessorInterceptor.cs index cbedefa..85b3b89 100644 --- a/EntityFramework.Exceptions.Common/ExceptionProcessorInterceptor.cs +++ b/EntityFramework.Exceptions.Common/ExceptionProcessorInterceptor.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using System.Data.Common; +using System.Diagnostics; using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -30,27 +31,7 @@ public override void SaveChangesFailed(DbContextErrorEventData eventData) { var dbUpdateException = eventData.Exception as DbUpdateException; - if (eventData.Exception.GetBaseException() is T providerException) - { - var error = GetDatabaseError(providerException); - - if (error != null && dbUpdateException != null) - { - var exception = ExceptionFactory.Create(error.Value, dbUpdateException, dbUpdateException.Entries); - - switch (exception) - { - case UniqueConstraintException uniqueConstraint when eventData.Context != null: - SetConstraintDetails(eventData.Context, uniqueConstraint, providerException); - break; - case ReferenceConstraintException referenceConstraint when eventData.Context != null: - SetConstraintDetails(eventData.Context, referenceConstraint, providerException); - break; - } - - throw exception; - } - } + ProcessException(eventData, dbUpdateException); base.SaveChangesFailed(eventData); } @@ -60,6 +41,14 @@ public override void SaveChangesFailed(DbContextErrorEventData eventData) { var dbUpdateException = eventData.Exception as DbUpdateException; + ProcessException(eventData, dbUpdateException); + + return base.SaveChangesFailedAsync(eventData, cancellationToken); + } + + [StackTraceHidden] + private void ProcessException(DbContextErrorEventData eventData, DbUpdateException dbUpdateException) + { if (eventData.Exception.GetBaseException() is T providerException) { var error = GetDatabaseError(providerException); @@ -77,15 +66,11 @@ public override void SaveChangesFailed(DbContextErrorEventData eventData) SetConstraintDetails(eventData.Context, referenceConstraint, providerException); break; } - throw exception; } } - - return base.SaveChangesFailedAsync(eventData, cancellationToken); } - private void SetConstraintDetails(DbContext context, UniqueConstraintException exception, Exception providerException) { if (uniqueIndexDetailsList == null)