books-read.com
books-read.com » Компьютеры и Интернет » Базы данных » Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

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

Наш ресурс дает возможность бесплатно читать книгу онлайн Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю. Жанр: Базы данных . Сайт books-read.com дает возможность читать полную версию книги без регистрации и sms. Все книги онлайн, не надо качать fb2, epub, txt.
Добавить книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю в приложение ЧИТАТЬ КНИГУ ОФЛАЙН в приложении ios/android
Перейти на страницу:

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()
, а транзакция уже выполняется, исполняющая среда EF Core создает в этой транзакции точку сохранения. Если вызов терпит неудачу, то откат транзакции происходит в точку сохранения, а не в начало транзакции. Точками сохранения можно также управлять в коде, вызывая методы
CreateSavePoint()
и
RollbackToSavepoint()
для транзакции:

using var trans = context.Database.BeginTransaction();

try

{

  // Создать, изменить, удалить запись.

  trans.CreateSavepoint(&quot;check point 1&quot;);

  context.SaveChanges();

  trans.Commit();

}

catch (Exception ex)

{

  trans. RollbackToSavepoint(&quot;check point 1&quot;);

}

Транзакции и стратегии выполнения

 В случае активной стратегии выполнения (как при использовании

EnableRetryOnFailure()
) перед созданием явной транзакции вы должны получить ссылку на текущую стратегию выполнения, которая применяется EF Core. Затем вызовите на этой стратегии метод
Execute()
, чтобы создать явную транзакцию:

var strategy = context.Database.CreateExecutionStrategy();

strategy.Execute(() =&gt;

{

  using var trans = context.Database.BeginTransaction();

  try

   {

    actionToExecute();

    trans.Commit();

  }

  catch (Exception ex)

  {

    trans.Rollback();

  }

});

События SavingChanges/SavedChanges

В версии EF Core 5 появились три новых события, которые инициируются методами

SaveChanges()/SaveChangesAsync()
. Событие
SavingChanges
запускается при вызове
SaveChanges()
, но перед выполнением операторов SQL в хранилище данных, а событие
SavedChanges
— после завершения работы метода
SaveChanges()
. В следующем (простейшем) коде демонстрируются события и их обработчики в действии:

public ApplicationDbContext(DbContextOptions&lt;ApplicationDbContext&gt; options)

    : base(options)

{

  SavingChanges += (sender, args) =&gt;

  {

     Console.WriteLine($&quot;Saving changes for {((DbContext)sender).Database.

GetConnectionString()}&quot;);

  };

  SavedChanges += (sender, args) =&gt;

  {

    Console.WriteLine($&quot;Saved {args.EntitiesSavedCount} entities&quot;);

  };

  SaveChangesFailed += (sender, args) =&gt;

  {

    Console.WriteLine($&quot;An exception occurred! {args.Exception.Message}

entities&quot;);

  };

}

Класс DbSet<T>

Для каждой сущности в своей объектной модели вы добавляете свойство типа

DbSet&lt;T&gt;
. Класс
DbSet&lt;T&gt;
представляет собой специализированную коллекцию, используемую для взаимодействия с поставщиком баз данных с целью получения, добавления, обновления и удаления записей в базе данных. Каждая коллекция
DbSet&lt;T&gt;
предлагает несколько основных служб для взаимодействия с базой данных. Любые запросы LINQ, запускаемые в отношении класса
DbSet&lt;T&gt;
, транслируются поставщиком базы данных в запросы к базе данных. В табл. 22.2 описан ряд основных членов класса
DbSet&lt;T&gt;
.

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

Троелсен Эндрю читать все книги автора по порядку

Троелсен Эндрю - на сайте онлайн книг books-read.com Вы можете читать полные версии книг автора в одном месте.


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

Отзывы читателей о книге Язык программирования C#9 и платформа .NET5, автор: Троелсен Эндрю. Читайте комментарии и мнения людей о произведении.


Уважаемые читатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

  • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
  • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
  • 3. Просьба отказаться от нецензурной лексики.
  • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

Надеемся на Ваше понимание и благоразумие. С уважением, администратор books-read.com


Прокомментировать
Подтвердите что вы не робот:*