Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Троелсен Эндрю, "Язык программирования C#9 и платформа .NET5" бесплатно, без регистрации.
modelBuilder.Entity<Car>(entity =>{<b> entity.HasQueryFilter(c => c.IsDrivable);</b><b> entity.Property(p</b><b> => p.IsDrivable).HasField("_isDrivable").HasDefaultValue(true);</b> entity.HasOne(d => d.Make<b>Navigation</b>) .WithMany(p => p.<b>Cars</b>) .HasForeignKey(d => d.MakeId) .OnDelete(DeleteBehavior.ClientSetNull) .HasConstraintName("FK_Make_Inventory");});Специальные исключения
Распространенный прием для обработки исключений предусматривает перехват системного исключения (и/или исключения EF Core, как в текущем примере), его регистрацию в журнале и генерацию специального исключения. Если специальное исключение перехватывается вышерасположенным методом, то разработчику известно, что исключение уже было зарегистрировано в журнале, и необходимо только отреагировать на него надлежащим образом в коде.
Создайте в проекте
AutoLot.DalExceptionsCustomException.csCustomConcurrencyException.csCustomDbUpdateException.csCustomRetryLimitExceededException.cs// CustomException.csusing 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.csusing 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.csusing 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.csusing 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()DbContextusingAutoLot.Dal.ExceptionsApplicationDbContext.csSaveChanges()public override int SaveChanges(){ try { return base.SaveChanges(); } catch (DbUpdateConcurrencyException ex) { // Произошла ошибка параллелизма. // Подлежит регистрации в журнале и надлежащей обработке.