Интерфейс командной строки задействует фабрику контекстов, чтобы создать экземпляр производного класса DbContext
CreateDbContext аргументы из командной строки, о чем пойдет речь позже в главе.Метод OnModelCreating
Базовый класс DbContext
OnModelCreating, который применяется для придания формы сущностям, используя Fluent API. Детали подробно раскрываются далее в главе, а пока добавьте в класс ApplicationDbContext следующий код:protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// Обращения к Fluent API.
OnModelCreatingPartial(modelBuilder);
}
partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
Сохранение изменений
Чтобы заставить DbContext
ChangeTracker сохранить любые изменения, внесенные в отслеживаемые сущности, вызовите метод SaveChanges (или SaveChangesAsync) на экземпляре класса, производного от DbContext:static void SampleSaveChanges
{
// Фабрика не предназначена для такого использования,
// но это демонстрационный код
var context = new ApplicationDbContextFactory.CreateDbContext(null);
// Внести какие-нибудь изменения.
context.SaveChanges
}
В оставшемся материале главы (и книги) вы обнаружите много примеров сохранения изменений.
Поддержка транзакций и точек сохранения
Исполняющая среда 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
Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT