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

  return (string)parameterName.Value;

}

При наличии такого кода тест становится тривиальным. Добавьте в файл класса CarTests.cs следующий тест:

[Theory]

[InlineData(1, "Zippy")]

[InlineData(2, "Rusty")]

[InlineData(3, "Mel")]

[InlineData(4, "Clunker")]

[InlineData(5, "Bimmer")]

[InlineData(6, "Hank")]

[InlineData(7, "Pinky")]

[InlineData(8, "Pete")]

[InlineData(9, "Brownie")]

public void ShouldGetValueFromStoredProc(int id, string expectedName)

{

    Assert.Equal(expectedName, new CarRepo(Context).GetPetName(id));

}

<p id="AutBody_Root1046"><strong>Создание записей</strong></p>

Записи добавляются в базу данных за счет их создания в коде, добавления к DbSet и вызова метода SaveChanges()/SaveChangesAsync() контекста. Во время выполнения метода SaveChanges() объект ChangeTracker сообщает обо всех добавленных сущностях, а инфраструктура EF Core вместе с поставщиком баз данных создают подходящий оператор (операторы) SQL для вставки записи (записей).

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

Все операторы SQL, показанные далее в разделе, были получены с применением профилировщика SQL Server.

На заметку! Записи можно добавлять также с использованием класса, производного от DbContext. Во всех примерах для добавления записей будут применяться свойства DbSet. В классах DbSet и DbContext имеются асинхронные версии методов Add()/AddRange(), но здесь рассматриваются только синхронные версии.

<p id="AutBody_Root1047"><strong>Состояние сущности</strong></p>

Когда сущность создана с помощью кода, но еще не была добавлена в DbSet, значением EntityState является Detached. После добавления новой сущности в DbSet значение EntityState устанавливается в Added. В случае успешного выполнения SaveChanges() значение EntityState устанавливается в Unchanged.

<p id="AutBody_Root1048"><strong>Добавление одной записи</strong></p>

В следующем тесте демонстрируется добавление одиночной записи в таблицу Inventory:

[Fact]

public void ShouldAddACar()

{

  ExecuteInATransaction(RunTheTest);

  void RunTheTest()

  {

    var car = new Car

    {

      Color = "Yellow",

      MakeId = 1,

      PetName = "Herbie"

    };

    var carCount = Context.Cars.Count();

    Context.Cars.Add(car);

    Context.SaveChanges();

    var newCarCount = Context.Cars.Count();

    Assert.Equal(carCount+1,newCarCount);

  }

}

Ниже приведен выполняемый оператор SQL. Обратите внимание, что у недавно добавленной сущности запрашиваются свойства, сгенерированные базой данных (Id и TimeStamp). Когда результат запроса поступает в исполняющую среду EF Core, сущность обновляется с использованием значений серверной стороны:

exec sp_executesql N'SET NOCOUNT ON;

INSERT INTO [dbo].[Inventory] ([Color], [MakeId], [PetName])

VALUES (@p0, @p1, @p2);

SELECT [Id], [IsDrivable], [TimeStamp]

FROM [dbo].[Inventory]

WHERE @@ROWCOUNT = 1 AND [Id] = scope_identity();

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

<p id="AutBody_Root1049"><strong>Добавление одной записи с использованием метода Attach()</strong></p>

Когда первичный ключ сущности сопоставлен со столбцом идентичности в SQL Server, исполняющая среда EF Core будет трактовать экземпляр сущности как добавленный (Added), если значение свойства первичного ключа равно 0. Следующий тест создает новую сущность Car и оставляет для свойства Id стандартное значение 0. После присоединения сущности к ChangeTracker ее состояние устанавливается в Added и вызов SaveChanges() добавит сущность в базу данных:

[Fact]

public void ShouldAddACarWithAttach()

{

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

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

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

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

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

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

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

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

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