Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен
Сопоставление "таблица на иерархию" (ТРН)
Сопоставление "таблица на тип" (ТРТ)
Навигационные свойства и внешние ключи
Отсутствие свойств для внешних ключей
Отношения "один ко многим"
Отношения "один к одному"
Отношения "многие ко многим" (нововведение в версии EF Core 5)
Каскадное поведение
Необязательные отношения
Обязательные отношения
Соглашения, связанные с сущностями
Отображение свойств на столбцы
Аннотации данных Entity Framework
Аннотации и навигационные свойства
Интерфейс Fluent API
Отображение классов и свойств
Стандартные значения
Вычисляемые столбцы
Отношения "один ко многим"
Отношения "один к одному"
Отношения "многие ко многим"
Соглашения, аннотации данных и Fluent API — что выбрать?
Выполнение запросов
Смешанное выполнение на клиентской и серверной сторонах
Сравнение отслеживаемых и неотслеживаемых запросов
Важные функциональные средства EF Core
Обработка значений, генерируемых базой данных
Проверка параллелизма
Устойчивость подключений
Связанные данные
Энергичная загрузка
Фильтрованные включаемые данные
Энергичная загрузка с разделением запросов
Явная загрузка
Ленивая загрузка
Глобальные фильтры запросов
Глобальные фильтры запросов на навигационных свойствах
Явная загрузка с глобальными фильтрами запросов
Выполнение низкоуровневых запросов SQL с помощью LINQ
Пакетирование операторов
Принадлежащие сущностные типы
Сопоставление с функциями базы данных
Команды CLI глобального инструмента EF Core
Команды для управления миграциями
Команда add
Исключение таблиц из миграций
Команда remove
Команда list
Команда script
Команды для управления базой данных
Команда drop
Команда update
Команды для управления типами DbContext
Команда scaffold
Резюме
Глава 23
"Сначала код" или "сначала база данных"
Создание проектов AutoLot.Dal и AutoLot.Models
Создание шаблонов для класса, производного от DbContext, и сущностных классов
Переключение на подход "сначала код"
Создание фабрики экземпляров класса, производного от DbContext, на этапе проектирования
Создание начальной миграции
Применение миграции
Обновление модели
Сущности
Класс BaseEntity
Принадлежащий сущностный класс Person
Сущность Car(Inventory)
Сущность Customer
Сущность Make
Сущность CreditRisk
Сущность Order
Сущность SeriLogEntry
Класс ApplicationDbContext
Обновление кода Fluent API
Сущность SeriLogEntry
Сущность CreditRisk
Сущность Customer
Сущность Make
Сущность Order
Сущность Car
Специальные исключения
Переопределение метода SaveChanges()
Обработка событий DbContext и ChangeTracker
Создание миграции и обновление базы данных
Добавление представления базы данных и хранимой процедуры
Добавление класса MigrationHelpers
Обновление и применение миграции
Добавление модели представления
Добавление класса модели представления
Добавление класса модели представления к ApplicationDbContext
Добавление хранилищ
Добавление базового интерфейса IRepo
Добавление класса BaseRepo
Реализация метода SaveChanges()
Реализация общих методов чтения
Реализация методов добавления, обновления и удаления
Интерфейсы хранилищ, специфичных для сущностей
Интерфейс хранилища данных об автомобилях
Интерфейс хранилища данных о кредитных рисках
Интерфейс хранилища данных о заказчиках
Интерфейс хранилища данных о производителях
Интерфейс хранилища данных о заказах
Реализация классов хранилищ, специфичных для сущностей
Хранилище данных об автомобилях
Хранилище данных о кредитных рисках
Хранилище данных о заказчиках
Хранилище данных о производителях
Хранилище данных о заказах
Программная работа с базой данных и миграциями
Удаление, создание и очистка базы данных
Инициализация базы данных
Создание выборочных данных
Загрузка выборочных данных
Настройка тестов
Создание проекта
Конфигурирование проекта
Создание класса TestHelpers
Добавление класса BaseTest
Добавление вспомогательных методов для выполнения тестов в транзакциях
Добавление класса тестовой оснастки EnsureAutoLotDatabase
Добавление классов интеграционных тестов
Тестовые методы [Fact] и [Theory]
Выполнение тестов
Запрашивание базы данных
Состояние сущности
Запросы LINQ
Выполнение запросов LINQ
Получение всех записей
Фильтрация записей
Сортировка записей
Сортировка записей в обратном порядке
Извлечение одиночной записи
Использование First()/FirstOrDefault()
Использование Last()/LastOrDefault()
Использование Single()/SingleOrDefault()
Глобальные фильтры запросов
Отключение глобальных фильтров запросов
Фильтры запросов для навигационных свойств
Энергичная загрузка связанных данных
Разделение запросов к связанным данным
Фильтрация связанных данных
Явная загрузка связанных данных
Явная загрузка связанных данных с фильтрами запросов
Выполнение запросов SQL с помощью LINQ
Методы агрегирования
Any() и All()
Получение данных из хранимых процедур
Создание записей
Состояние сущности
Добавление одной записи
Добавление одной записи с использованием метода Attach()
Добавление нескольких записей одновременно
Соображения относительно столбца идентичности при добавлении записей
Добавление объектного графа
Обновление записей
Состояние сущности
Обновление отслеживаемых сущностей
Обновление неотслеживаемых сущностей
Проверка параллелизма
Удаление записей
Состояние сущности
Удаление отслеживаемых сущностей
Удаление неотслеживаемых сущностей
Перехват отказов каскадного удаления
Проверка параллелизма
Резюме
Часть VIII
Глава 24
Побудительные причины создания WPF
Унификация несходных API-интерфейсов
Обеспечение разделения обязанностей через XAML
Обеспечение оптимизированной модели визуализации
Упрощение программирования сложных пользовательских интерфейсов
Исследование сборок WPF
Роль класса Application
Построение класса приложения