Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Троелсен Эндрю, "Язык программирования C#9 и платформа .NET5" бесплатно, без регистрации.
var car = Context.Cars
<b> .FromSqlInterpolated($"Select * from dbo.Inventory where Id = {carId}")</b>
<b> .Include(x => x.MakeNavigation)</b>
<b> .First();</b>
Assert.Equal("Black", car.Color);
Assert.Equal("VW", 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($"{typeof(Car).FullName}");
var tableName = entity.GetTableName();
var schemaName = entity.GetSchema();
<b> var cars = Context.Cars.FromSqlRaw($"Select * from {schemaName}.{tableName}")</b>
<b> .Where(x => x.MakeId == makeId).ToList();</b>
Assert.Equal(expectedCount, cars.Count);
}
Во время применения методов
FromSqlRaw()/FromSqlInterpolated()
Методы агрегирования
В EF Core также поддерживаются методы агрегирования серверной стороны (
Мах()
Min()
Count()
Average()
Where()
First()
Single()
IgnoreQueryFiltersсе()
Первый тест (из
CarTests.cs
Car
[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()
WHERE
[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()
[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=>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 => x.MakeId == makeId).Count();
Assert.Equal(expectedCount, count);
}
Оба теста создают те же самые обращения SQL к серверу (в каждом тесте значение для
MakeId
[InlineData]