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

    var car2 = context3.Cars.First(c => c.Id == 1);

    Assert.Equal("White", car2.Color);

  }

}

Ниже показан выполняющийся оператор SQL:

exec sp_executesql N'SET NOCOUNT ON;

UPDATE [dbo].[Inventory] SET [Color] = @p0

WHERE [Id] = @p1 AND [TimeStamp] = @p2;

SELECT [TimeStamp]

FROM [dbo].[Inventory]

WHERE @@ROWCOUNT = 1 AND [Id] = @p1;

',N'@p1 int,@p0 nvarchar(50),@p2 varbinary(8)',@p1=1,@p0=N'White',

@p2=0x000000000000862D

<p id="AutBody_Root1057"><strong>Проверка параллелизма</strong></p>

Проверка параллелизма подробно обсуждалась в предыдущей главе. Вспомните, что когда внутри сущности определено свойство TimeStamp, то значение этого свойства используется в конструкции WHERE при сохранении изменений (обновлений или удалений) в базе данных. Вместо поиска только первичного ключа к запросу добавляется поиск значения TimeStamp, например:

UPDATE [dbo].[Inventory] SET [PetName] = @p0

WHERE [Id] = @p1 AND [TimeStamp] = @p2;

В следующем тесте демонстрируется пример создания исключения, связанного с параллелизмом, его перехвата и применения Entries для получения исходных значений, текущих значений и значений, которые в настоящий момент хранятся в базе данных. Получение текущих значений требует еще одного обращения к базе данных:

[Fact]

public void ShouldThrowConcurrencyException()

{

  ExecuteInATransaction(RunTheTest);

  void RunTheTest()

  {

    var car = Context.Cars.First();

    // Обновить базу данных за пределами контекста.

    Context.Database.ExecuteSqlInterpolated(

      $"Update dbo.Inventory set Color='Pink' where Id = {car.Id}");

    car.Color = "Yellow";

    var ex = Assert.Throws(

      () => Context.SaveChanges());

    var entry = ((DbUpdateConcurrencyException) ex.InnerException)?.Entries[0];

    PropertyValues originalProps = entry.OriginalValues;

    PropertyValues currentProps = entry.CurrentValues;

    // Требует еще одного обращения к базе данных.

    PropertyValues databaseProps = entry.GetDatabaseValues();

  }

}

Ниже показаны выполняемые операторы SQL. Первым из них является оператор UPDATE, а вторым — обращение для получения значений базы данных:

exec sp_executesql N'SET NOCOUNT ON;

UPDATE [dbo].[Inventory] SET [Color] = @p0

WHERE [Id] = @p1 AND [TimeStamp] = @p2;

SELECT [TimeStamp]

FROM [dbo].[Inventory]

WHERE @@ROWCOUNT = 1 AND [Id] = @p1;'

,N'@p1 int,@p0 nvarchar(50),@p2 varbinary(8)',@p1=1,@p0=N'Yellow',

@p2=0x0000000000008665

exec sp_executesql N'SELECT TOP(1) [i].[Id], [i].[Color],

     [i].[IsDrivable], [i].[MakeId], [i].[PetName], [i].[TimeStamp]

FROM [dbo].[Inventory] AS [i]

WHERE [i].[Id] = @__p_0',N'@__p_0 int',@__p_0=1

<p id="AutBody_Root1058"><strong>Удаление записей</strong></p>

Одиночная сущность помечается для удаления путем вызова Remove() на DbSet или установки ее состояния в Deleted. Список записей помечается для удаления вызовом RemoveRange() на DbSet. Процесс удаления будет вызывать эффекты каскадирования для навигационных свойств на основе правил, сконфигурированных в методе OnModelCreating() (и регламентированных соглашениями EF Core). Если удаление не допускается из -за политики каскадирования, тогда генерируется исключение.

<p id="AutBody_Root1059"><strong>Состояние сущности</strong></p>
Перейти на страницу:

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

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных