Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Троелсен Эндрю, "Язык программирования C#9 и платформа .NET5" бесплатно, без регистрации.
static void SampleSaveChanges(){ // Фабрика не предназначена для такого использования, // но это демонстрационный код var context = new ApplicationDbContextFactory().CreateDbContext(null); // Внести какие-нибудь изменения. context.<b>SaveChanges()</b>;}В оставшемся материале главы (и книги) вы обнаружите много примеров сохранения изменений.
Поддержка транзакций и точек сохранения
Исполняющая среда EF Core помещает каждый вызов
SaveChanges()/SaveChangesAsync()DbContextDatabaseDbContextusing var trans = context.Database.BeginTransaction();try{ // Создать, изменить, удалить запись. context.SaveChanges(); trans.Commit();}catch (Exception ex){ trans.Rollback();}В версии EF Core 5 были введены точки сохранения для транзакций EF Core. Когда вызывается метод
SaveChanges()/SaveChangesAsync()CreateSavePoint()RollbackToSavepoint()using var trans = context.Database.BeginTransaction();try{ // Создать, изменить, удалить запись. trans.CreateSavepoint("check point 1"); context.SaveChanges(); trans.Commit();}catch (Exception ex){ trans. RollbackToSavepoint("check point 1");}Транзакции и стратегии выполнения
В случае активной стратегии выполнения (как при использовании
EnableRetryOnFailure()Execute()var strategy = context.Database.CreateExecutionStrategy();strategy.Execute(() =>{ using var trans = context.Database.BeginTransaction(); try { actionToExecute(); trans.Commit(); } catch (Exception ex) { trans.Rollback(); }});События SavingChanges/SavedChanges
В версии EF Core 5 появились три новых события, которые инициируются методами
SaveChanges()/SaveChangesAsync()SavingChangesSaveChanges()SavedChangesSaveChanges()public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options){ SavingChanges += (sender, args) => { Console.WriteLine($"Saving changes for {((DbContext)sender).Database.GetConnectionString()}"); }; SavedChanges += (sender, args) => { Console.WriteLine($"Saved {args.EntitiesSavedCount} entities"); }; SaveChangesFailed += (sender, args) => { Console.WriteLine($"An exception occurred! {args.Exception.Message}entities"); };}Класс DbSet<T>
Для каждой сущности в своей объектной модели вы добавляете свойство типа
DbSet<T>DbSet<T>DbSet<T>DbSet<T>DbSet<T>