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

[InlineData(2,1)]

[InlineData(3,1)]

[InlineData(4,2)]

[InlineData(5,3)]

[InlineData(6,1)]

public void ShouldGetAllCarsForAMakeExplicitlyWithQueryFilters(

    int makeId, int carCount)

{

  var make = Context.Makes.First(x => x.Id == makeId);

  IQueryable<Car> query = Context.Entry(make).Collection(c => c.Cars).Query();

  var qs = query.ToQueryString();

  query.Load();

  Assert.Equal(carCount,make.Cars.Count());

}

Этот тест похож на тест

ShouldGetTheCarsByMake()
из раздела "Фильтрация записей" ранее в главе. Однако вместо того, чтобы просто получить записи
Car
, которые имеют определенное значение
MakeId
, текущий тест сначала получает запись 
Make
и затем явно загружает записи
Car
для находящейся в памяти записи
Make
. Ниже показан сгенерированный код SQL:

DECLARE @__p_0 int = 5;

SELECT [i].[Id], [i].[Color], [i].[IsDrivable], [i].[MakeId],

       [i].[PetName], [i].[TimeStamp]

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

WHERE ([i].[IsDrivable] = CAST(1 AS bit)) AND ([i].[MakeId] = @__p_0)

Обратите внимание на то, что фильтр запросов по-прежнему применяется, хотя главной сущностью в запросе является запись

Make
. Для отключения фильтров запросов при явной загрузке записей вызовите
IgnoreQueryFilters()
в сочетании с методом
Query()
. Вот тест, который отключает фильтры запросов (находится в
MakeTests.cs
):

[Theory]

[InlineData(1, 2)]

[InlineData(2, 1)]

[InlineData(3, 1)]

[InlineData(4, 2)]

[InlineData(5, 3)]

[InlineData(6, 1)]

public void ShouldGetAllCarsForAMakeExplicitly(int makeId, int carCount)

{

  var make = Context.Makes.First(x => x.Id == makeId);

  IQueryable<Car> query =

    Context.Entry(make).<b>Collection(c =&gt; c.Cars).Query().IgnoreQueryFilters()</b>;

  var qs = query.IgnoreQueryFilters().ToQueryString();

  query.Load();

  Assert.Equal(carCount, make.Cars.Count());

}

Выполнение запросов SQL с помощью LINQ

Если оператор LINQ для отдельного запроса слишком сложен или тестирование показывает, что производительность оказалась ниже, чем желаемая, тогда данные можно извлекать с использованием низкоуровневого оператора SQL через метод

FromSqlRaw()
или
FromSqlInterpolated()
класса
DbSet&lt;T&gt;
. Оператором SQL может быть встроенный оператор
SELECT
языка Т-SQL, хранимая процедура или табличная функция. Если запрос является открытым (например, оператор Т-SQL без завершающей точки с запятой), тогда операторы LINQ можно добавлять к вызову метода
FromSqlRaw()/FromSqlInterpolated()
для дальнейшего определения генерируемого запроса. Полный запрос выполняется на серверной стороне с объединением оператора SQL и кода SQL, сгенерированного операторами LINQ.

Если оператор завершен или содержит код SQL, который не может быть достроен (скажем, задействует общие табличные выражения), то такой запрос все равно выполняется на серверной стороне, но любая дополнительная фильтрация и обработка должна делаться на клиентской стороне как LINQ to Objects. Метод

FromSqlRaw()
выполняет запрос в том виде, в котором он набран. Метод
FromSqlInterpolated()
применяет интерполяцию строк C# и помещает интерполированные значения в параметры. В следующих тестах (из
CarTests.cs
) демонстрируются примеры использования обоих методов с глобальными фильтрами запросов и без них:

[Fact]

public void ShouldNotGetTheLemonsUsingFromSql()

{

  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>    .ToList();</b>

  Assert.Equal(9, cars.Count);

}

[Fact]

public void ShouldGetTheCarsUsingFromSqlWithIgnoreQueryFilters()

{

  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>    .IgnoreQueryFilters().ToList();</b>

  Assert.Equal(10, cars.Count);

}

[Fact]

public void ShouldGetOneCarUsingInterpolation()

{

  var carId = 1;

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

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

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


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

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


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

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

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


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