Язык программирования 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()
DbContext
Database
DbContext
using 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()
SavingChanges
SaveChanges()
SavedChanges
SaveChanges()
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>