"There is a problem with SQl Server.", ex);
// Возникла проблема c SQL Server
}
catch (DbUpdateException ex)
{
// Подлежит регистрации в журнале и надлежащей обработке.
throw new CustomDbUpdateException(
"An error occurred updating the database", ex);
// Произошла ошибка при обновлении базы данных
}
catch (Exception ex)
{
// Подлежит регистрации в журнале и надлежащей обработке.
throw new CustomException(
"An error occurred updating the database", ex);
// Произошла ошибка при обновлении базы данных
}
}
Обработка событий DbContext и ChangeTracker
Перейдите к конструктору класса ApplicationDbContext
DbContext, которые обсуждались в предыдущей главе:public ApplicationDbContext(DbContextOptions
: base(options)
{
base.SavingChanges += (sender, args) =>
{
Console.WriteLine($"Saving changes for {((ApplicationDbContext)
sender)!.Database!.
GetConnectionString}"); };
base.SavedChanges += (sender, args) =>
{
Console.WriteLine($"Saved {args!.EntitiesSavedCount} changes for
{((ApplicationDbContext)sender)!.Database!.GetConnectionString}");
};
base.SaveChangesFailed += (sender, args) =>
{
Console.WriteLine(
$"An exception occurred! {args.Exception.Message} entities");
};
}
Затем добавьте обработчики для событий StateChanged
Tracked класса ChangeTracker:public ApplicationDbContext(DbContextOptions
: base(options)
{
...
ChangeTracker.Tracked += ChangeTracker_Tracked;
ChangeTracker.StateChanged += ChangeTracker_StateChanged;
}
Аргументы события Tracked
ApplicationDbContext следующий обработчик событий:private void ChangeTracker_Tracked(object? sender, EntityTrackedEventArgs e)
{
var source = (e.FromQuery) ? "Database" : "Code";
if (e.Entry.Entity is Car c)
{
Console.WriteLine($"Car entry {c.PetName} was added from {source}");
}
}
Событие StateChanged
ApplicationDbContext приведенный ниже обработчик событий. Если свойство NewState сущности имеет значение Unchanged, тогда выполняется проверка свойства OldState для выяснения, сущность была добавлена или же модифицирована.private void ChangeTracker_StateChanged(object? sender,
EntityStateChangedEventArgs e)
{
if (e.Entry.Entity is not Car c)
{
return;
}
var action = string.Empty;
Console.WriteLine(
$"Car {c.PetName} was {e.OldState} before the state changed to
{e.NewState}"); switch (e.NewState)
{
case EntityState.Unchanged:
action = e.OldState switch
{
EntityState.Added => "Added",
EntityState.Modified => "Edited",
_ => action
};
Console.WriteLine($"The object was {action}");
break;
}
}
Создание миграции и обновление базы данных
Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT