Многие демонстрируемые здесь методы имеют асинхронные версии. Синтаксис запросов LINQ структурно одинаков, поэтому будут использоваться только синхронные версии.
Состояние сущности
Когда сущность создается за счет чтения данных из базы, значение EntityState
Unchanged.Запросы LINQ
Тип коллекции DbSet
IQueryable, что позволяет применять команды LINQ языка C# для создания запросов, извлекающих информацию из базы данных. Наряду с тем, что все операторы LINQ языка C# доступны для использования с типом коллекции DbSet, некоторые операторы LINQ могут не поддерживаться поставщиком баз данных, а в EF Core появились дополнительные операторы LINQ. Неподдерживаемый оператор LINQ, который невозможно транслировать в язык запросов поставщика баз данных, приведет к генерации исключения времени выполнения, если только он не является последним в цепочке операторов LINQ. Когда неподдерживаемый оператор LINQ находится в самом конце цепочки LINQ, он выполнится на клиентской стороне (в коде С#).На заметку!
Настоящая книга не задумывалась как полный справочник по LINQ, так что в ней приводится не особо много примеров. С дополнительными примерами запросов LINQ можно ознакомиться по ссылкеhttps://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b.Выполнение запросов LINQ
Вспомните, что при использовании LINQ для запрашивания из базы данных списка сущностей запрос не выполняется до тех пор, пока не начнется проход по результатам запроса, пока запрос не будет преобразован в List
First, Single и т.д.Нововведением версии EF Core 5 стало то, что в большинстве запросов LINQ можно вызывать метод ToQueryString
ToQueryString возвращает только первый запрос, который будет выполняться. В рассматриваемых далее тестах это значение по возможности присваивается переменной (qs), чтобы вы могли изучить запрос во время отладки тестов.Первый набор тестов (если только специально не указано иначе) находится в файле класса CustomerTests.cs
Получение всех записей
Чтобы получить все записи из таблицы, просто используйте свойство DbSet
[Fact]:[Fact]
public void ShouldGetAllOfTheCustomers
{
var qs = Context.Customers.ToQueryString;
var customers = Context.Customers.ToList;
Assert.Equal(5, customers.Count);
}
Выделенный полужирным оператор транслируется в следующий код SQL:
SELECT [c].[Id], [c].[TimeStamp], [c].[FirstName], [c].[FullName],
[c].[LastName]
FROM [Dbo].[Customers] AS [c]Тот же самый процесс применяется для сущностей без ключей, подобных модели представления CustomerOrderViewModel
CustomerOrderView:modelBuilder.Entity
.ToView("CustomerOrderView", "dbo");
Экземпляр DbSet
DbSet для сущности с ключом. Отличие касается возможностей обновления. Изменения модели представления не могут быть сохранены в базе данных, тогда как изменения сущностей с ключами — могут. Добавьте в файл класса OrderTest.cs показанный далее тест, чтобы продемонстрировать получение данных из представления:public void ShouldGetAllViewModels
{
var qs = Context.Orders.ToQueryString;
var orders = Context.Orders.ToList;
Assert.NotEmpty(orders);
Assert.Equal(5,orders.Count);
}
Выделенный полужирным оператор транслируется в следующий код SQL:
SELECT [c].[Color], [c].[FirstName], [c].[IsDrivable], [c].[LastName],
[c].[Make], [c].
[PetName] FROM [dbo].[CustomerOrderView] AS [c]Фильтрация записей
Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT