RUSSIAN

Entity Framework Core в действии

Book information

Publisher
ДМК Пресс
Year
2022
ISBN
9785937001146, 9781617298363
Language
russian
Format
PDF
Filesize
25 MB (26374320 bytes)
Edition
2
Pages
\692
Time added
2022-10-29 09:47:25

Description

Entity Framework радикально упрощает доступ к данным в приложениях .NET. Этот простой в использовании инструмент объектно-реляционного отображения (ORM) позволяет писать код базы данных на чистом C#. Он автоматически отображает клас- сы в таблицы базы данных, разрешает запросы со стандартными командами LINQ и даже генерирует SQL-код за вас. Данная книга научит вас писать код для беспрепятственного взаимодействия с ба- зой данных при работе с приложениями .NET. Следуя соответствующим примерам из обширного опыта автора книги, вы быстро перейдете от основ к продвинутым методам. Помимо новейших функциональных возможностей EF, в книге рассма- триваются вопросы производительности, безопасности, рефакторинга и модульного тестирования. Издание предназначено разработчикам .NET, знакомым с реляционными базами данных. Предисловие Введение Благодарности Об этой книге Об авторе Об изображении на обложке Часть I. НАЧАЛО Глава 1. Введение в Entity Framework Core 1.1 Что вы узнаете из этой книги 1.2 Мой «момент озарения» 1.3 Несколько слов для разработчиков EF6.x 1.4 Обзор EF Core 1.4.1 Недостатки инструментов объектно-реляционного отображения 1.5 Что насчет нереляционных (NoSQL) баз данных? 1.6 Ваше первое приложение, использующее EF Core 1.6.1 Что нужно установить 1.6.2 Создание собственного консольного приложения .NET Core с помощью EF Core 1.7 База данных, к которой будет обращаться MyFirstEfCoreApp 1.8 Настройка приложения MyFirstEfCoreApp 1.8.1 Классы, которые отображаются в базу данных: Book и Author 1.8.2 DbContext 1.9 Заглянем под капот EF Core 1.9.1 Моделирование базы данных 1.9.2 Чтение данных 1.9.3 Обновление 1.10 Этапы разработки EF Core 1.11 Стоит ли использовать EF Core в своем следующем проекте? 1.11.1 .NET – это программная платформа будущего, и она будет быстрой! 1.11.2 Открытый исходный код и открытые сообщения 1.11.3 Мультиплатформенные приложения и разработка 1.11.4 Быстрая разработка и хорошие функциональные возможности 1.11.5 Хорошая поддержка 1.11.6 Всегда высокая производительность 1.12 Когда не следует использовать EF Core? Резюме Глава 2. Выполнение запроса к базе данных 2.1 Закладываем основу: наш сайт по продаже книг 2.1.1 Реляционная база данных приложения Book App 2.1.2 Другие типы связей, не описанные в этой главе 2.1.3 База данных – все таблицы 2.1.4 Классы, которые EF Core отображает в базу данных 2.2 Создание DbContext 2.2.1 Определение DbContext приложения: EfCoreContext 2.2.2 Создание экземпляра DbContext приложения 2.2.3 Создание базы данных для своего приложения 2.3 Разбираемся с запросами к базе данных 2.3.1 Доступ к свойству DbContext приложения 2.3.2 Серия команд LINQ / EF Core 2.3.3 Команда выполнения 2.3.4 Два типа запросов к базе данных 2.4 Загрузка связанных данных 2.4.1 Немедленная загрузка: загрузка связей с первичным классом сущности 2.1.2 Явная загрузка: загрузка связей после первичного класса сущности 2.4.3 Выборочная загрузка: загрузка определенных частей первичного класса сущности и любых связей 2.4.4 Отложенная загрузка: загрузка связанных данных по мере необходимости 2.5 Использование вычисления на стороне клиента: адаптация данных на последнем этапе запроса 2.6 Создание сложных запросов 2.7 Знакомство с архитектурой приложения Book App 2.8 Добавляем сортировку, фильтрацию и разбиение на страницы 2.8.1 Сортировка книг по цене, дате публикации и оценкам покупателей 2.8.2 Фильтрация книг по году публикации, категориям и оценкам покупателей 2.8.3 Другие параметры фильтрации: поиск текста по определенной строке 2.8.4 Разбиение книг на страницы в списке 2.9 Собираем все вместе: объединение объектов запроса Резюме Глава 3. Изменение содержимого базы данных 3.1 Представляем свойство сущности State 3.2 Создание новых строк в таблице 3.2.1 Самостоятельное создание отдельной сущности 3.2.2 Создание книги с отзывом 3.3 Обновление строк базы данных 3.3.1 Обработка отключенных обновлений в веб-приложении 3.4 Обработка связей в обновлениях 3.4.1 Основные и зависимые связи 3.4.2 Обновление связей «один к одному»: добавляем PriceOffer в книгу 3.4.3 Обновление связей «один ко многим»: добавляем отзыв в книгу 3.4.4 Обновление связи «многие ко многим» 3.4.5 Расширенная функция: обновление связей через внешние ключи 3.5 Удаление сущностей 3.5.1 Мягкое удаление: использование глобального фильтра запросов, чтобы скрыть сущности 3.5.2 Удаление только зависимой сущности без связей 3.5.3 Удаление основной сущности, у которой есть связи 3.5.4 Удаление книги с зависимыми связями Резюме Глава 4. Использование EF Core в бизнес-логике 4.1 Вопросы, которые нужно задать, и решения, которые нужно принять, прежде чем начать писать код 4.1.1 Три уровня сложности кода бизнес-логики 4.2 Пример сложной бизнес-логики: обработка заказа на приобретение книги 4.3 Использование паттерна проектирования для реализации сложной бизнес-логики 4.3.1 Пять правил по созданию бизнес-логики, использующей EF Core 4.4 Реализация бизнес-логики для обработки заказа 4.4.1 Правило 1: Бизнес-логика требует определения структуры базы данных 4.4.2 Правило 2: Ничто не должно отвлекать от бизнес-логики 4.4.3 Правило 3: Бизнес-логика должна думать, что работает с данными в памяти 4.4.4 Правило 4: Изолируйте код доступа к базе данных в отдельный проект 4.4.5 Правило 5: Бизнес-логика не должна вызывать метод EF Core, SaveChanges 4.4.6 Собираем все вместе: вызов бизнес-логики для обработки заказов 4.4.7 Размещение заказа в приложении Book App 4.4.8 Плюсы и минусы паттерна сложной бизнес-логики 4.5 Пример простой бизнес-логики: ChangePriceOfferService 4.5.1 Мой подход к проектированию простой бизнес-логики 4.5.2 Пишем код класса ChangePriceOfferService 4.5.3 Плюсы и минусы этого паттерна бизнес-логики 4.6 Пример валидации: добавление отзыва в книгу с проверкой 4.6.1 Плюсы и минусы этого паттерна бизнес-логики 4.7 Добавление дополнительных функций в обработку вашей бизнес-логики 4.7.1 Валидация данных, которые вы записываете в базу 4.7.2 Использование транзакций для объединения кода бизнес-логики в одну логическую атомарную операцию 4.7.3 Использование класса RunnerTransact2WriteDb Резюме Глава 5. Использование EF Core в веб-приложениях ASP.NET Core 5.1 Знакомство с ASP.NET Core 5.2 Разбираемся с архитектурой приложения Book App 5.3 Внедрение зависимостей 5.3.1 Почему нужно знать, что такое внедрение зависимостей, работая с ASP.NET Core 5.3.2 Базовый пример внедрения зависимостей в ASP.NET Core 5.3.3 Жизненный цикл сервиса, созданного внедрением зависимостей 5.3.4 Особые соображения, касающиеся приложений Blazor Server 5.4 Делаем DbContext приложения доступным, используя внедрение зависимостей 5.4.1 Предоставление информации о расположении базы данных 5.4.2 Регистрация DbContext приложения у поставщика внедрения зависимостей 5.4.3 Регистрация фабрики DbContext у поставщика внедрения зависимостей 5.5 Вызов кода доступа к базе данных из ASP.NET Core 5.5.1 Краткое изложение того, как работает паттерн ASP.NET Core MVC, и термины, которые он использует 5.5.2 Где находится код EF Core в приложении Book App? 5.6 Реализация страницы запроса списка книг 5.6.1 Внедрение экземпляра DbContext приложения через внедрение зависимостей 5.6.2 Использование фабрики DbContext для создания экземпляра DbContext 5.7 Реализация методов базы данных как сервиса внедрения зависимостей 5.7.1 Регистрация класса в качестве сервиса во внедрении зависимостей 5.7.2 Внедрение ChangePubDateService в метод действия ASP.NET 5.7.3 Улучшаем регистрацию классов доступа к базе данных как сервисов 5.8 Развертывание приложения ASP.NET Core с базой данных 5.8.1 Местонахождение базы данных на веб-сервере 5.8.2 Создание и миграция базы данных 5.9 Использование функции миграции в EF Core для изменения структуры базы данных 5.9.1 Обновление рабочей базы данных 5.9.2 Заставляем приложение обновить базу данных при запуске 5.10 Использование async/await для лучшей масштабируемости 5.10.1 Чем паттерн async/await полезен в веб-приложении, использующем EF Core 5.10.2 Где использовать async/await для доступа к базе данных? 5.10.3 Переход на версии команд EF Core с async/await 5.11 Выполнение параллельных задач: как предоставить DbContext 5.11.1 Получение экземпляра DbContext для параллельного запуска 5.11.2 Запуск фоновой службы в ASP.NET Core 5.11.3 Другие способы получения нового экземпляра DbContext Резюме Глава 6. Советы и техники, касающиеся чтения и записи данных с EF Core 6.1 Чтение из базы данных 6.1.1 Этап ссылочной фиксации в запросе 6.1.2 Понимание того, что делает метод AsNoTracking и его разновидности 6.1.3 Эффективное чтение иерархических данных 6.1.4 Понимание того, как работает метод Include 6.1.5 Обеспечение отказоустойчивости загрузки навигационных коллекций 6.1.6 Использование глобальных фильтров запросов в реальных ситуациях 6.1.7 Команды LINQ, требующие особого внимания 6.1.8 Использование AutoMapper для автоматического построения запросов с методом Select 6.1.9 Оценка того, как EF Core создает класс сущности при чтении данных 6.2 Запись данных в базу с EF Core 6.2.1 Оценка того, как EF Core записывает сущности или связи в базу данных 6.2.2 Оценка того, как DbContext обрабатывает запись сущностей и связей 6.2.3 Быстрый способ копирования данных со связями 6.2.4 Быстрый способ удалить сущность Резюме Часть II. ОБ ENTITY FRAMEWORK В ДЕТАЛЯХ Глава 7. Настройка нереляционных свойств 7.1 Три способа настройки EF Core 7.2 Рабочий пример настройки EF Core 7.3 Конфигурация по соглашению 7.3.1 Соглашения для классов сущностей 7.3.2 Соглашения для параметров в классе сущности 7.3.3 Условные обозначения для имени, типа и размера 7.3.4 По соглашению поддержка значения NULL для свойства основана на типе .NET 7.3.5 Соглашение об именах EF Core определяет первичные ключи 7.4 Настройка с помощью аннотаций данных 7.4.1 Использование аннотаций из пространства имен System.ComponentModel.DataAnnotations 7.4.2 Использование аннотаций из пространства имен System.ComponentModel.DataAnnotations.Schema 7.5 Настройка с использованием Fluent API 7.6 Исключение свойств и классов из базы данных 7.6.1 Исключение класса или свойства с помощью Data Annotations 7.6.2 Исключение класса или свойства с помощью Fluent API 7.7 Установка типа, размера и допустимости значений NULL для столбца базы данных 7.8 Преобразование значения: изменение данных при чтении из базы данных или записи в нее 7.9 Различные способы настройки первичного ключа 7.9.1 Настройка первичного ключа с помощью Data Annotations 7.9.2 Настройка первичного ключа через Fluent API 7.9.3 Настройка сущности как класса с доступом только на чтение 7.10 Добавление индексов в столбцы базы данных 7.11 Настройка именования на стороне базы данных 7.11.1 Настройка имен таблиц 7.11.2 Настройка имени схемы и группировки схем 7.11.3 Настройка имен столбцов базы данных в таблице 7.12 Настройка глобальных фильтров запросов 7.13 Применение методов Fluent API в зависимости от типа поставщика базы данных 7.14 Теневые свойства: сокрытие данных столбца внутри EF Core 7.14.1 Настройка теневых свойств 7.14.2 Доступ к теневым свойствам 7.15 Резервные поля: управление доступом к данным в классе сущности 7.15.1 Создание простого резервного поля, доступного через свойство чтения/записи 7.15.2 Создание столбца с доступом только на чтение 7.15.3 Сокрытие даты рождения внутри класса 7.15.4 Настройка резервных полей 7.16 Рекомендации по использованию конфигурации EF Core 7.16.1 Сначала используйте конфигурацию «По соглашению» 7.16.2 По возможности используйте Data Annotations 7.16.3 Используйте Fluent API для всего остального 7.16.4 Автоматизируйте добавление команд Fluent API по сигнатурам класса или свойства Резюме Глава 8. Конфигурирование связей 8.1 Определение терминов, относящихся к связям 8.2 Какие навигационные свойства нам нужны? 8.3 Настройка связей 8.4 Настройка связей по соглашению 8.4.1. Что делает класс классом сущности? 8.4.2 Пример класса сущности с навигационными свойствами 8.4.3 Как EF Core находит внешние ключи по соглашению 8.4.4 Поддержка значения null у внешних ключей: обязательные или необязательные зависимые связи 8.4.5 Внешние ключи: что произойдет, если не указать их? 8.4.6 Когда подход «По соглашению» не работает? 8.5 Настройка связей с помощью аннотаций данных 8.5.1 Аннотация ForeignKey 8.5.2 Аннотация InverseProperty 8.6 Команды Fluent API для настройки связей 8.6.1 Создание связи «один к одному» 8.6.2 Создание связи «один ко многим» 8.6.3 Создание связей «многие ко многим» 8.7 Управление обновлениями навигационных свойств коллекции 8.8 Дополнительные методы, доступные во Fluent API 8.8.1 OnDelete: изменение действия при удалении зависимой сущности 8.8.2 IsRequired: определение допустимости значения null для внешнего ключа 8.8.3 HasPrincipalKey: использование альтернативного уникального ключа 8.8.4 Менее используемые параметры в связях Fluent API 8.9 Альтернативные способы отображения сущностей в таблицы базы данных 8.9.1 Собственные типы: добавление обычного класса в класс сущности 8.9.2 Таблица на иерархию (TPH): размещение унаследованных классов в одной таблице 8.9.3 Таблица на тип (TPT): у каждого класса своя таблица 8.9.4 Разбиение таблицы: отображение нескольких классов сущностей в одну и ту же таблицу 8.9.5 Контейнер свойств: использование словаря в качестве класса сущности Резюме Глва 9. Управление миграциями базы данных 9.1 Как устроена эта глава 9.2 Сложности изменения базы данных приложения 9.2.1 Какие базы данных нуждаются в обновлении 9.2.2 Миграция, которая может привести к потере данных 9.3 Часть 1: знакомство с тремя подходами к созданию миграции 9.4 Создание миграции с помощью команды EF Core add migration 9.4.1 Требования перед запуском любой команды миграции EF Core 9.4.2 Запуск команды add migration 9.4.3 Заполнение базы данных с помощью миграции 9.4.4 Миграции и несколько разработчиков 9.4.5 Использование собственной таблицы миграций, позволяющей использовать несколько DbContext в одной базе данных 9.5 Редактирование миграции для обработки сложных ситуаций 9.5.1 Добавление и удаление методов MigrationBuilder внутри класса миграции 9.5.2 Добавление команд SQL в миграцию 9.5.3 Добавление собственных команд миграции 9.5.4 Изменение миграции для работы с несколькими типами баз данных 9.6 Использование сценариев SQL для создания миграций 9.6.1 Использование инструментов сравнения баз данных SQL для выполнения миграции 9.6.2 Написание кода сценариев изменения SQL для миграции базы данных вручную 9.6.3 Проверка соответствия сценариев изменения SQL модели базы данных EF Core 9.7 Использование инструмента обратного проектирования EF Core 9.7.1 Запуск команды обратного проектирования 9.7.2 Установка и запуск команды обратного проектирования Power Tools 9.7.3 Обновление классов сущности и DbContext при изменении базы данных 9.8 Часть 2: применение миграций к базе данных 9.8.1 Вызов метода Database.Migrate из основного приложения 9.8.2 Выполнение метода Database.Migrate из отдельного приложения 9.8.3 Применение миграции EF Core с помощью SQL-сценария 9.8.4 Применение сценариев изменения SQL с помощью инструмента миграций 9.9 Миграция базы данных во время работы приложения 9.9.1 Миграция, которая не содержит критических изменений 9.9.2 Работа с критическими изменениями, когда вы не можете остановить приложение Резюме Глава 10. Настройка расширенных функций и разрешение конфликтов параллельного доступа 10.1 DbFunction: использование пользовательских функций с EF Core 10.1.1 Настройка скалярной функции 10.1.2 Настройка табличной функции 10.1.3 Добавление кода пользовательской функции в базу данных 10.1.4 Использование зарегистрированной пользовательской функции в запросах к базе данных 10.2 Вычисляемый столбец: динамически вычисляемое значение столбца 10.3 Установка значения по умолчанию для столбца базы данных 10.3.1 Использование метода HasDefaultValue для добавления постоянного значения для столбца 10.3.2 Использование метода HasDefaultValueSql для добавления команды SQL для столбца 10.3.3 Использование метода HasValueGenerator для назначения генератора значений свойству 10.4 Последовательности: предоставление чисел в строгом порядке 10.5 Помечаем свойства, созданные базой данных 10.5.1 Помечаем столбец, создаваемый при добавлении или обновлении 10.5.2 Помечаем значение столбца как установленное при вставке новой строки 10.5.3 Помечаем столбец/свойство как «обычное» 10.6 Одновременные обновления: конфликты параллельного доступа 10.6.1 Почему конфликты параллельного доступа так важны? 10.6.2 Возможности решения конфликтов параллельного доступа в EF Core 10.6.3 Обработка исключения DbUpdateConcurrencyException 10.6.4 Проблема с отключенным параллельным обновлением Резюме Глава 11. Углубляемся в DbContext 11.1 Обзор свойств класса DbContext 11.2 Как EF Core отслеживает изменения 11.3 Обзор команд, которые изменяют свойство сущности State 11.3.1 Команда Add: вставка новой строки в базу данных 11.3.2 Метод Remove: удаление строки из базы данных 11.3.3 Изменение класса сущности путем изменения данных в нем 11.3.4 Изменение класса сущности путем вызова метода Update 11.3.5 Метод Attach: начать отслеживание существующего неотслеживаемого класса сущности 11.3.6 Установка свойства сущности State напрямую 11.3.7 TrackGraph: обработка отключенных обновлений со связями 11.4 Метод SaveChanges и как он использует метод ChangeTracker. DetectChanges 11.4.1 Как метод SaveChanges находит все изменения состояния 11.4.2 Что делать, если метод ChangeTracker.DetectChanges занимает слишком много времени 11.4.3 Использование состояния сущностей в методе SaveChanges 11.4.4 Перехват изменений свойства State с использованием события 11.4.5 Запуск событий при вызове методов SaveChanges и SaveChangesAsync 11.4.6 Перехватчики EF Core 11.5 Использование команд SQL в приложении EF Core 11.5.1 Методы FromSqlRaw/FromSqlInterpolated: использование SQL в запросе EF Core 11.5.2 Методы ExecuteSqlRaw и ExecuteSqlInterpolated: выполнение команды без получения результата 11.5.3 Метод Fluent API ToSqlQuery: отображение классов сущностей в запросы 11.5.4 Метод Reload: используется после команд ExecuteSql 11.5.5 GetDbConnection: выполнение собственных команд SQL 11.6 Доступ к информации о классах сущностей и таблицам базы данных 11.6.1 Использование context.Entry(entity).Metadata для сброса первичных ключей 11.6.2 Использование свойства context.Model для получения информации о базе данных 11.7 Динамическое изменение строки подключения DbContext 11.8 Решение проблем, связанных с подключением к базе данных 11.8.1 Обработка транзакций базы данных с использованием стратегии выполнения 11.8.2 Изменение или написание собственной стратегии исполнения Резюме Часть III. ИСПОЛЬЗОВАНИЕ ENTITY FRAMEWORK CORE В РЕАЛЬНЫХ ПРИЛОЖЕНИЯХ Глава 12. Использование событий сущности для решения проблем бизнес-логики 12.1 Использование событий для решения проблем бизнес-логики 12.1.1 Пример использования событий предметной области 12.1.2 Пример событий интеграции 12.2 Определяем, где могут быть полезны события предметной области и интеграции 12.3 Где можно использовать события с EF Core? 12.3.1 Плюс: следует принципу разделения ответственностей 12.3.2 Плюс: делает обновления базы данных надежными 12.3.3 Минус: делает приложение более сложным 12.3.4 Минус: усложняет отслеживание потока исполнения кода 12.4 Реализация системы событий предметной области с EF Core 12.4.1 Создайте несколько классов событий предметной области, которые нужно будет вызвать 12.4.2 Добавьте код в классы сущностей, где будут храниться события предметной области 12.4.3 Измените класс сущности, чтобы обнаружить изменение, при котором вызывается событие 12.4.4 Создайте обработчики событий, соответствующие событиям предметной области 12.4.5 Создайте диспетчер событий, который находит и запускает правильный обработчик событий 12.4.6 Переопределите метод SaveChanges и вставьте вызов диспетчера событий перед вызовом этого метода 12.4.7 Зарегистрируйте диспетчер событий и все обработчики событий 12.5 Внедрение системы событий интеграции с EF Core 12.5.1 Создание сервиса, который обменивается данными со складом 12.5.2 Переопределение метода SaveChanges для обработки события интеграции 12.6 Улучшение события предметной области и реализаций событий интеграции 12.6.1 Обобщение событий: запуск до, во время и после вызова метода SaveChanges 12.6.2 Добавление поддержки асинхронных обработчиков событий 12.6.3 Несколько обработчиков событий для одного и того же события 12.6.4 Последовательности событий, в которых одно событие запускает другое Резюме Глава 13. Предметно-ориентированное проектирование и другие архитектурные подходы 13.1 Хорошая программная архитектура упрощает создание и сопровождение приложения 13.2 Развивающаяся архитектура приложения Book App 13.2.1 Создание модульного монолита для обеспечения реализации принципов разделения ответственностей 13.2.2 Использование принципов предметно-ориентированного проектирования в архитектуре и в классах сущностей 13.2.3 Применение чистой архитектуры согласно описанию Роберта Мартина 13.3 Введение в предметно-ориентированное проектирование на уровне класса сущности 13.4 Изменение сущностей приложения Book App, чтобы следовать предметно-ориентированному проектированию 13.4.1 Изменение свойств сущности Book на доступ только для чтения 13.4.2 Обновление свойств сущности Book с помощью методов в классе сущности 13.4.3 Управление процессом создания сущности Book 13.4.4 Разбор различий между сущностями и объектом-значением 13.4.5 Минимизация связей между классами сущностей 13.4.6 Группировка классов сущностей 13.4.7 Принимаем решение, когда бизнес-логику не следует помещать внутрь сущности 13.4.8 Применение паттерна «Ограниченный контекст» к DbContext приложения 13.5 Использование классов сущностей в стиле DDD в вашем приложении 13.5.1 Вызов метода доступа AddPromotion с помощью паттерна «Репозиторий» 13.5.2 Вызов метода доступа AddPromotion с помощью библиотеки GenericServices 13.5.3 Добавление отзыва в класс сущности Book через паттерн «Репозиторий» 13.5.4 Добавление отзыва в класс сущности Book с помощью библиотеки GenericServices 13.6 Обратная сторона сущностей DDD: слишком много методов доступа 13.7 Решение проблем с производительностью в DDD-сущностях 13.7.1 Добавить код базы данных в свои классы сущностей 13.7.2 Сделать конструктор Review открытым и написать код для добавления отзыва вне сущности 13.7.3 Использовать события предметной области, чтобы попросить обработчик событий добавить отзыв в базу данных 13.8 Три архитектурных подхода: сработали ли они? 13.8.1 Модульный монолит, реализующий принцип разделения ответственностей с помощью проектов 13.8.2 Принципы DDD как в архитектуре, так и в классах сущностей 13.8.3 Чистая архитектура согласно описанию Роберта С. Мартина Резюме Глава 14. Настройка производительности в EF Core 14.1 Часть 1: решаем, какие проблемы с производительностью нужно исправлять 14.1.1 Фраза «Не занимайтесь настройкой производительности на ранних этапах» не означает, что нужно перестать думать об этом 14.1.2 Как определить, что работает медленно и требует настройки производительности? 14.1.3 Затраты на поиск и устранение проблем с производительностью 14.2 Часть 2: методы диагностики проблем с производительностью 14.2.1 Этап 1. Получить хорошее общее представление, оценив опыт пользователей 14.2.2 Этап 2. Найти весь код доступа к базе данных, связанный с оптимизируемой функцией 14.2.3 Этап 3. Проверить SQL-код, чтобы выявить низкую производительность 14.3 Часть 3: методы устранения проблем с производительностью 14.4 Использование хороших паттернов позволяет приложению хорошо работать 14.4.1 Использование метода Select для загрузки только нужных столбцов 14.4.2 Использование разбиения по страницам и/или фильтрации результатов поиска для уменьшения количества загружаемых строк 14.4.3 Понимание того, что отложенная загрузка влияет на производительность базы данных 14.4.4 Добавление метода AsNoTracking к запросам с доступом только на чтение 14.4.5 Использование асинхронной версии команд EF Core для улучшения масштабируемости 14.4.6 Поддержание кода доступа к базе данных изолированным/слабосвязанным 14.5 Антипаттерны производительности: запросы к базе данных 14.5.1 Антипаттерн: отсутствие минимизации количества обращений к базе данных 14.5.2 Антипаттерн: отсутствие индексов для свойства, по которому вы хотите выполнить поиск 14.5.3 Антипаттерн: использование не самого быстрого способа загрузки отдельной сущности 14.5.4 Антипаттерн: перенос слишком большой части запроса данных на сторону приложения 14.5.5 Антипаттерн: вычисления вне базы данных 14.5.6 Антипаттерн: использование неоптимального SQL-кода в LINQ-запросе 14.5.7 Антипаттерн: отсутствие предварительной компиляции часто используемых запросов 14.6 Антипаттерны производительности: операции записи 14.6.1 Антипаттерн: неоднократный вызов метода SaveChanges 14.6.2 Антипаттерн: слишком большая нагрузка на метод DetectChanges 14.6.3 Антипаттерн: HashSet не используется для навигационных свойств коллекции 14.6.4 Антипаттерн: использование метода Update, когда нужно изменить только часть сущности 14.6.5 Антипаттерн: проблема при запуске – использование одного большого DbContext 14.7 Паттерны производительности: масштабируемость доступа к базе данных 14.7.1 Использование пулов для снижения затрат на создание нового DbContext приложения 14.7.2 Добавление масштабируемости с незначительным влиянием на общую скорость 14.7.3 Повышение масштабируемости базы данных за счет упрощения запросов 14.7.4 Вертикальное масштабирование сервера базы данных 14.7.5 Выбор правильной архитектуры для приложений, которым требуется высокая масштабируемость Резюме Глава 15. Мастер-класс по настройке производительности запросов к базе данных 15.1 Настройка тестового окружения и краткое изложение четырех подходов к повышению производительности 15.2 Хороший LINQ: использование выборочного запроса 15.3 LINQ + пользовательские функции: добавляем SQL в код LINQ 15.4 SQL + Dapper: написание собственного SQL-кода 15.5 LINQ + кеширование: предварительное вычисление частей запроса, которое занимает много времени 15.5.1 Добавляем способ обнаружения изменений, влияющих на кешированные значения 15.5.2 Добавление кода для обновления кешированных значений 15.5.3 Добавление свойств в сущность Book с обработкой параллельного доступа 15.5.4 Добавление системы проверки и восстановления в систему событий 15.6 Сравнение четырех подходов к производительности с усилиями по разработке 15.7 Повышение масштабируемости базы данных Резюме Глава 16. Cosmos DB, CQRS и другие типы баз данных 16.1 Различия между реляционными и нереляционными базами данных 16.2 Cosmos DB и ее провайдер для EF Core 16.3 Создание системы CQRS с использованием Cosmos DB 16.4 Проектирование приложения с архитектурой CQRS с двумя базами данных 16.4.1 Создание события, вызываемого при изменении сущности Book 16.4.2 Добавление событий в метод сущности Book 16.4.3 Использование библиотеки EfCore.GenericEventRunner для переопределения BookDbContext 16.4.4 Создание классов сущностей Cosmos и DbContext 16.4.5 Создание обработчиков событий Cosmos 16.5 Структура и данные учетной записи Cosmos DB 16.5.1 Структура Cosmos DB с точки зрения EF Core 16.5.2 Как CosmosClass хранится в Cosmos DB 16.6 Отображение книг через Cosmos DB 16.6.1 Отличия Cosmos DB от реляционных баз данных 16.6.2 Основное различие между Cosmos DB и EF Core: миграция базы данных Cosmos 16.6.3 Ограничения поставщика базы данных EF Core 5 для Cosmos DB 16.7 Стоило ли использование Cosmos DB затраченных усилий? Да! 16.7.1 Оценка производительности системы CQRS с двумя базами данных в приложении Book App 16.7.2 Исправление функций, с которыми поставщик баз данных EF Core 5 для Cosmos DB не справился 16.7.3 Насколько сложно было бы использовать эту систему CQRS с двумя базами данных в своем приложении? 16.8 Отличия в других типах баз данных Резюме Глава 17. Модульное тестирование приложений, использующих EF Core 17.1 Знакомство с настройкой модульного теста 17.1.1 Окружение тестирования: библиотека модульного тестирования xUnit 17.1.2 Созданная мной библиотека для модульного тестирования приложений, использующих EF Core 17.2 Подготовка DbContext приложения к модульному тестированию 17.2.1 Параметры DbContext приложения передаются в конструктор 17.2.2 Настройка параметров DbContext приложения через OnConfiguring 17.3 Три способа смоделировать базу данных при тестировании приложений EF Core 17.4 Выбор между базой данных того же типа, что и рабочая, и базой данных SQLite in-memory 17.5 Использование базы данных промышленного типа в модульных тестах 17.5.1 Настройка строки подключения к базе данных, которая будет использоваться для модульного теста 17.5.2 Создание базы данных для каждого тестового класса для параллельного запуска тестов в xUnit 17.5.3 Убеждаемся, что схема базы данных актуальна, а база данных пуста 17.5.4 Имитация настройки базы данных, которую обеспечит миграция EF Core 17.6 Использование базы данных SQLite in-memory для модульного тестирования 17.7 Создание заглушки или имитации базы данных EF Core 17.8 Модульное тестирование базы данных Cosmos DB 17.9 Заполнение базы данных тестовыми данными для правильного тестирования кода 17.10 Решение проблемы, когда один запрос к базе данных нарушает другой этап теста 17.10.1 Код теста с методом ChangeTracker.Clear в отключенном состоянии 17.10.2 Код теста с несколькими экземплярами DbContext в отключенном состоянии 17.11 Перехват команд, отправляемых в базу данных 17.11.1 Использование расширения параметра LogTo для фильтрации и перехвата сообщений журналов EF Core 17.11.2 Использование метода ToQueryString для отображения сгенерированного SQL-кода из LINQ-запроса Резюме Приложение A. Краткое введение в LINQ Предметный указатель

Similar books

Методология научных исследований и прикладной аналитики: Учебник. Изд. 5-е, дополн. и перераб. В 2 т. Т.2: Научные исследования: Мастерство и искусство научного мышления и научной работы / Methodology of Scientific Research and Practical Analytics: A Textbook: Fifth Edition. In two volumes. Vol.2: Scientific research: Art of scientific thinking and scientific work / Méthodologie de la recherche scientifique et de l’analytique appliquée: Manuel: Cinquième édition. En 2 tomes. T.2: Recherches scientifiques: Art de la pensée scientifique et du travail scientifique

Методология научных исследований и прикладной аналитики: Учебник. Изд. 5-е, дополн. и перераб. В 2 т. Т.2: Научные исследования: Мастерство и искусство научного мышления и научной работы / Methodology of Scientific Research and Practical Analytics: A Textbook: Fifth Edition. In two volumes. Vol.2: Scientific research: Art of scientific thinking and scientific work / Méthodologie de la recherche scientifique et de l’analytique appliquée: Manuel: Cinquième édition. En 2 tomes. T.2: Recherches scientifiques: Art de la pensée scientifique et du travail scientifique

2025 · PDF

Методы и понятия философии искусства: практикум : уровень подготовки кадров высшей квалификации: ассиснтурв-стажировка : специальности: 54.09.03 "Искусство дизайна (по видам)", 54.09.02 "Мастерство декоративно-прикладного искусства и народных промыслов (по видам)" : укрупненная группа специальностей: 54.00.00 "Изобразительное и прикладные виды искусств" : квалификация выпускника: "Преподаватель творческих дисциплин в высшей школе. Дизайнер", "Преподаватель творческих дисциплин в высшей школе. Художник декоративно-прикладного искусства" : форма обучения: очная

Методы и понятия философии искусства: практикум : уровень подготовки кадров высшей квалификации: ассиснтурв-стажировка : специальности: 54.09.03 "Искусство дизайна (по видам)", 54.09.02 "Мастерство декоративно-прикладного искусства и народных промыслов (по видам)" : укрупненная группа специальностей: 54.00.00 "Изобразительное и прикладные виды искусств" : квалификация выпускника: "Преподаватель творческих дисциплин в высшей школе. Дизайнер", "Преподаватель творческих дисциплин в высшей школе. Художник декоративно-прикладного искусства" : форма обучения: очная

2022 · PDF

Разработка графического интерфейса пользователя информационной системы с использованием библиотеки QT: учебное пособие для студентов 1 курса направлений подготовки 09.04.02 "Информационные системы и технологии", 27.04.03 "Системный анализ и управление" очной формы обучения, 2 курса направления подготовки 10.05.03 "Информационная безопасность автоматизированных систем" очной формы обучения и 3 курса направления подготовки 09.03.02 "Информационные системы и технологии" очной и заочной форм обучения : учебное электронное издание

Разработка графического интерфейса пользователя информационной системы с использованием библиотеки QT: учебное пособие для студентов 1 курса направлений подготовки 09.04.02 "Информационные системы и технологии", 27.04.03 "Системный анализ и управление" очной формы обучения, 2 курса направления подготовки 10.05.03 "Информационная безопасность автоматизированных систем" очной формы обучения и 3 курса направления подготовки 09.03.02 "Информационные системы и технологии" очной и заочной форм обучения : учебное электронное издание

2021 · PDF

Археологические культуры Сибири в контексте кросс-культурных контактов в Евразии: к 300-летию первых научных археологических раскопок в Сибири (1722 г.) =: Archaeological Cultures of Siberia in the context of Cross-cultural contacts in Eurasia: dedicated to the 300th anniversary of the first scientific archaeological excavations in Siberia (1722) : материалы Международной археологической конференции молодых исследователей "Археологические культуры Сибири в контексте кросс-культурных контактов в Евразии: к 300-летию первых научных археологических раскопок в Сибири (1722 г.)" (Новосибирск, 21-25 ноября 2022 г.)

Археологические культуры Сибири в контексте кросс-культурных контактов в Евразии: к 300-летию первых научных археологических раскопок в Сибири (1722 г.) =: Archaeological Cultures of Siberia in the context of Cross-cultural contacts in Eurasia: dedicated to the 300th anniversary of the first scientific archaeological excavations in Siberia (1722) : материалы Международной археологической конференции молодых исследователей "Археологические культуры Сибири в контексте кросс-культурных контактов в Евразии: к 300-летию первых научных археологических раскопок в Сибири (1722 г.)" (Новосибирск, 21-25 ноября 2022 г.)

2022 · PDF

Трешниковские чтения - 2023. Современная географическая картина мира и технологии географического образования =: Treshnikov readings - 2023. Modern geographical global picture and technology of geographic education : материалы Всероссийской научно-практической конференции с международным участием, посвящённой памяти знаменитого российского океанолога, исследователя Арктики и Антарктики, академика Алексея Фёдоровича Трёшникова и 60-летию Ульяновского областного отделения Всероссийской общественной организации "Русское гаографическое общество" (13 апреля 2023)

Трешниковские чтения - 2023. Современная географическая картина мира и технологии географического образования =: Treshnikov readings - 2023. Modern geographical global picture and technology of geographic education : материалы Всероссийской научно-практической конференции с международным участием, посвящённой памяти знаменитого российского океанолога, исследователя Арктики и Антарктики, академика Алексея Фёдоровича Трёшникова и 60-летию Ульяновского областного отделения Всероссийской общественной организации "Русское гаографическое общество" (13 апреля 2023)

2023 · PDF

Управление объектами интеллектуальной собственности. Искусство изобретать: учебник для обучающихся по направлениям подготовки 23.00.00 , направлениям подготовки 23.03.01 "Технология транспортных процессов", уровень образования-"бакалавриат", 23.03.03 "Эксплуатация транспортно-технологических машин и комплексов", уровень образования-"бакалавриат", 23.04.01 "Технология транспортных процессов", уровень образования- "магистратура", 23.04.03 "Эксплуатация транспортно-технологических машин и комплексов", уровень образования- "магистратура"

Управление объектами интеллектуальной собственности. Искусство изобретать: учебник для обучающихся по направлениям подготовки 23.00.00 , направлениям подготовки 23.03.01 "Технология транспортных процессов", уровень образования-"бакалавриат", 23.03.03 "Эксплуатация транспортно-технологических машин и комплексов", уровень образования-"бакалавриат", 23.04.01 "Технология транспортных процессов", уровень образования- "магистратура", 23.04.03 "Эксплуатация транспортно-технологических машин и комплексов", уровень образования- "магистратура"

2022 · PDF

Философия. Учебно-методический комплекс дисциплины по направлениям подготовки: 51.03.03 (071800.62) «Социально-культурная деятельность», профили подготовки: «Социально-культурные технологии в индустрии досуга», «Менеджмент социально-культурной деятельности», «Менеджмент детско-юношеского досуга», «Постановка и продюсирование культурно-досуговых программ», «Социально-культурная анимация и рекреация»; 38.03.02 (080200.62) «Менеджмент», профили подготовки: «Управление человеческими ресурсами», «Управление малым бизнесом», квалификации (степень) выпускника – «бакалавр»

Философия. Учебно-методический комплекс дисциплины по направлениям подготовки: 51.03.03 (071800.62) «Социально-культурная деятельность», профили подготовки: «Социально-культурные технологии в индустрии досуга», «Менеджмент социально-культурной деятельности», «Менеджмент детско-юношеского досуга», «Постановка и продюсирование культурно-досуговых программ», «Социально-культурная анимация и рекреация»; 38.03.02 (080200.62) «Менеджмент», профили подготовки: «Управление человеческими ресурсами», «Управление малым бизнесом», квалификации (степень) выпускника – «бакалавр»

2014 · PDF

Проектирование устройств приема и обработки сигналов: учебно-методическое пособие по курсу "Устройства приема и обработки сигналов" для студентов всех форм обучения специальностей: 210400.62 Радиотехника. Бакалавр Б.3.10. Основы цифровой обработки сигналов; 210700.62 Системы мобильной связи. Бакалавр Б.3.19. Радиоприемные устройства систем мобильной связи; 210601.65 Радиоэлектронные системы и комплексы. Специалист С.3.18. Устройства приема и обработки сигналов; 090302.65 Защита информации в системах связи и управления. Специалист С.3.30. Устройства приема и обработки сигналов

Проектирование устройств приема и обработки сигналов: учебно-методическое пособие по курсу "Устройства приема и обработки сигналов" для студентов всех форм обучения специальностей: 210400.62 Радиотехника. Бакалавр Б.3.10. Основы цифровой обработки сигналов; 210700.62 Системы мобильной связи. Бакалавр Б.3.19. Радиоприемные устройства систем мобильной связи; 210601.65 Радиоэлектронные системы и комплексы. Специалист С.3.18. Устройства приема и обработки сигналов; 090302.65 Защита информации в системах связи и управления. Специалист С.3.30. Устройства приема и обработки сигналов

2015 · PDF