Создайте в проекте AutoLot.Dal
Exceptions и поместите в него четыре новых файла классов, CustomException.cs, CustomConcurrencyException.cs, CustomDbUpdateException.cs и CustomRetryLimitExceededException.cs, содержимое которых показано ниже:// CustomException.cs
using System;
namespace AutoLot.Dal.Exceptions
{
public class CustomException : Exception
{
public CustomException {}
public CustomException(string message) : base(message) { }
public CustomException(string message, Exception innerException)
: base(message, innerException) { }
}
}
// CustomConcurrencyException.cs
using Microsoft.EntityFrameworkCore;
namespace AutoLot.Dal.Exceptions
{
public class CustomConcurrencyException : CustomException
{
public CustomConcurrencyException { }
public CustomConcurrencyException(string message) : base(message) { }
public CustomConcurrencyException(
string message, DbUpdateConcurrencyException innerException)
: base(message, innerException) { }
}
}
// CustomDbUpdateException.cs
using Microsoft.EntityFrameworkCore;
namespace AutoLot.Dal.Exceptions
{
public class CustomDbUpdateException : CustomException
{
public CustomDbUpdateException { }
public CustomDbUpdateException(string message) : base(message) { }
public CustomDbUpdateException(
string message, DbUpdateException innerException)
: base(message, innerException) { }
}
}
// CustomRetryLimitExceededException.cs
using System;
using Microsoft.EntityFrameworkCore.Storage;
namespace AutoLot.Dal.Exceptions
{
public class CustomRetryLimitExceededException : CustomException
{
public CustomRetryLimitExceededException { }
public CustomRetryLimitExceededException(string message)
: base(message) { }
public CustomRetryLimitExceededException(
string message, RetryLimitExceededException innerException)
: base(message, innerException) { }
}
}
На заметку!
Обработка специальных исключений была подробно раскрыта в главе 7.Переопределение метода SaveChanges
Как обсуждалось в предыдущей главе, метод SaveChanges
DbContext сохраняет результаты операций изменения, добавления и удаления в базе данных. Переопределение этого метода позволяет инкапсулировать обработку исключений в одном месте. Располагая специальными исключениями, добавьте оператор using для AutoLot.Dal.Exceptions в начало файла ApplicationDbContext.cs, после чего переопределите метод SaveChanges:public override int SaveChanges
{
try
{
return base.SaveChanges;
}
catch (DbUpdateConcurrencyException ex)
{
// Произошла ошибка параллелизма.
// Подлежит регистрации в журнале и надлежащей обработке.
throw new CustomConcurrencyException(
"A concurrency error happened.", ex);
// Произошла ошибка параллелизма
}
catch (RetryLimitExceededException ex)
{
// Подлежит регистрации в журнале и надлежащей обработке.
throw new CustomRetryLimitExceededException(
Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT