Читаем Язык программирования C#9 и платформа .NET5 полностью

Интерфейс командной строки задействует фабрику контекстов, чтобы создать экземпляр производного класса DbContext, предназначенный для выполнения действий вроде создания и применения миграций базы данных. Поскольку фабрика является конструкцией этапа проектирования и не используется во время выполнения, строка подключения к базе данных разработки обычно будет жестко закодированной. В версии EF Core 5 появилась возможность передавать методу 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, а транзакция уже выполняется, исполняющая среда EF Core создает в этой транзакции точку сохранения. Если вызов терпит неудачу, то откат транзакции происходит в точку сохранения, а не в начало транзакции. Точками сохранения можно также управлять в коде, вызывая методы 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) перед созданием явной транзакции вы должны получить ссылку на текущую стратегию выполнения, которая применяется EF Core. Затем вызовите на этой стратегии метод 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

Перейти на страницу:

Похожие книги

Программирование. Принципы и практика использования C++ Исправленное издание
Программирование. Принципы и практика использования C++ Исправленное издание

Специальное издание самой читаемой и содержащей наиболее достоверные сведения книги по C++. Книга написана Бьярне Страуструпом — автором языка программирования C++ — и является каноническим изложением возможностей этого языка. Помимо подробного описания собственно языка, на страницах книги вы найдете доказавшие свою эффективность подходы к решению разнообразных задач проектирования и программирования. Многочисленные примеры демонстрируют как хороший стиль программирования на С-совместимом ядре C++, так и современный -ориентированный подход к созданию программных продуктов. Третье издание бестселлера было существенно переработано автором. Результатом этой переработки стала большая доступность книги для новичков. В то же время, текст обогатился сведениями и методиками программирования, которые могут оказаться полезными даже для многоопытных специалистов по C++. Не обойдены вниманием и нововведения языка: стандартная библиотека шаблонов (STL), пространства имен (namespaces), механизм идентификации типов во время выполнения (RTTI), явные приведения типов (cast-операторы) и другие. Настоящее специальное издание отличается от третьего добавлением двух новых приложений (посвященных локализации и безопасной обработке исключений средствами стандартной библиотеки), довольно многочисленными уточнениями в остальном тексте, а также исправлением множества опечаток. Книга адресована программистам, использующим в своей повседневной работе C++. Она также будет полезна преподавателям, студентам и всем, кто хочет ознакомиться с описанием языка «из первых рук».

Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов

Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT
97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

Успешная карьера архитектора программного обеспечения требует хорошего владения как технической, так и деловой сторонами вопросов, связанных с проектированием архитектуры. В этой необычной книге ведущие архитекторы ПО со всего света обсуждают важные принципы разработки, выходящие далеко за пределы чисто технических вопросов.?Архитектор ПО выполняет роль посредника между командой разработчиков и бизнес-руководством компании, поэтому чтобы добиться успеха в этой профессии, необходимо не только овладеть различными технологиями, но и обеспечить работу над проектом в соответствии с бизнес-целями. В книге более 50 архитекторов рассказывают о том, что считают самым важным в своей работе, дают советы, как организовать общение с другими участниками проекта, как снизить сложность архитектуры, как оказывать поддержку разработчикам. Они щедро делятся множеством полезных идей и приемов, которые вынесли из своего многолетнего опыта. Авторы надеются, что книга станет источником вдохновения и руководством к действию для многих профессиональных программистов.

Нил Форд , Билл де Ора , Майкл Хайгард

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT