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
Перейти на страницу:

  var car = Context.Cars

<b>    .FromSqlInterpolated($&quot;Select * from dbo.Inventory where Id = {carId}&quot;)</b>

<b>    .Include(x =&gt; x.MakeNavigation)</b>

<b>    .First();</b>

  Assert.Equal(&quot;Black&quot;, car.Color);

  Assert.Equal(&quot;VW&quot;, car.MakeNavigation.Name);

}

[Theory]

[InlineData(1, 1)]

[InlineData(2, 1)]

[InlineData(3, 1)]

[InlineData(4, 2)]

[InlineData(5, 3)]

[InlineData(6, 1)]

public void ShouldGetTheCarsByMakeUsingFromSql(int makeId, int expectedCount)

{

  var entity = Context.Model.FindEntityType($&quot;{typeof(Car).FullName}&quot;);

  var tableName = entity.GetTableName();

  var schemaName = entity.GetSchema();

<b>  var cars = Context.Cars.FromSqlRaw($&quot;Select * from {schemaName}.{tableName}&quot;)</b>

<b>    .Where(x =&gt; x.MakeId == makeId).ToList();</b>

  Assert.Equal(expectedCount, cars.Count);

}

Во время применения методов

FromSqlRaw()/FromSqlInterpolated()
действует ряд правил: столбцы, возвращаемые из оператора SQL, должны соответствовать столбцам в модели, должны возвращаться все столбцы для модели, а возвращать связанные данные не допускается.

Методы агрегирования

В EF Core также поддерживаются методы агрегирования серверной стороны (

Мах()
,
Min()
,
Count()
,
Average()
и т.д.). Вызовы методов агрегирования можно добавлять в конец запроса LINQ с вызовами
Where()
или же сам вызов метода агрегирования может содержать выражение фильтра (подобно
First()
и
Single()
). Агрегирование выполняется на серверной стороне и из запроса возвращается одиночное значение. Глобальные фильтры запросов оказывают воздействие на методы агрегирования и могут быть отключены с помощью
IgnoreQueryFiltersсе()
. В операторы SQL, показанные в этом разделе, были получены с использованием профилировщика SQL Server.

Первый тест (из

CarTests.cs
) просто подсчитывает все записи
Car
в базе данных. Из-за того, что фильтр запросов активен, результатом подсчета будет 9:

[Fact]

public void ShouldGetTheCountOfCars()

{

  var count = Context.Cars.Count();

  Assert.Equal(9, count);

}

Ниже приведен код SQL, который выполнялся:

The executed SQL is shown here:SELECT COUNT(*)

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

WHERE [i].[IsDrivable] = CAST(1 AS bit)

После добавления вызова

IgnoreQueryFilters()
метод
Count()
возвращает 10 и конструкция
WHERE
удаляется из запроса SQL:

[Fact]

public void ShouldGetTheCountOfCarsIgnoreQueryFilters()

{

  var count = Context.Cars.IgnoreQueryFilters().Count();

  Assert.Equal(10, count);

}

Вот сгенерированный код SQL:

SELECT COUNT(*) FROM [dbo].[Inventory] AS [i]

Следующие тесты (из

CarTests.cs
) демонстрируют метод
Count()
с условием
WHERE
. В первом тесте выражение добавляется прямо в вызов метода
Count()
, а во втором вызов метода
Count()
помещается в конец запроса LINQ:

[Theory]

[InlineData(1, 1)]

[InlineData(2, 1)]

[InlineData(3, 1)]

[InlineData(4, 2)]

[InlineData(5, 3)]

[InlineData(6, 1)]

public void ShouldGetTheCountOfCarsByMakeP1(int makeId, int expectedCount)

{

    var count = Context.Cars.Count(x=&gt;x.MakeId == makeId);

    Assert.Equal(expectedCount, count);

}

[Theory]

[InlineData(1, 1)]

[InlineData(2, 1)]

[InlineData(3, 1)]

[InlineData(4, 2)]

[InlineData(5, 3)]

[InlineData(6, 1)]

public void ShouldGetTheCountOfCarsByMakeP2(int makeId, int expectedCount)

{

    var count = Context.Cars.Where(x =&gt; x.MakeId == makeId).Count();

    Assert.Equal(expectedCount, count);

}

Оба теста создают те же самые обращения SQL к серверу (в каждом тесте значение для

MakeId
изменяется на основе
[InlineData]
):

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

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

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


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

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


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

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

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


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