Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

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

Покупка
Артикул: 817211.01.99
Entity Framework радикально упрощает доступ к данным в приложениях .NET. Этот простой в использовании инструмент объектно-реляционного отображения (ORM) позволяет писать код базы данных на чистом C#. Он автоматически отображает классы в таблицы базы данных, разрешает запросы со стандартными командами LINQ и даже генерирует SQL-код за вас. Данная книга научит вас писать код для беспрепятственного взаимодействия с базой данных при работе с приложениями .NET. Следуя соответствующим примерам из обширного опыта автора книги, вы быстро перейдете от основ к продвинутым методам. Помимо новейших функциональных возможностей EF, в книге рассматриваются вопросы производительности, безопасности, рефакторинга и модульного тестирования. Издание предназначено разработчикам .NET, знакомым с реляционными базами данных.
Смит, Д. Entity Framework Core в действии : практическое руководство / Д. Смит ; пер. с англ. Д. А. Беликова. - Москва : ДМК Пресс, 2023. - 690 с. - ISBN 978-5-93700-114-6. - Текст : электронный. - URL: https://znanium.com/catalog/product/2109485 (дата обращения: 22.11.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов
Джон П. Смит

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

Entity Framework Core  
in Action

SECOND EDITION

JON P. SMITH
Foreword by Julie Lerman

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

6-е издание

ДЖОН П. СМИТ
Предисловие Джули Лерман

Москва, 2023

УДК 004.4
ББК 32.372
С50

Смит Дж. П.
С50 
Entity Framework Core в действии / пер. с англ. Д. А. Беликова. – М.: ДМК Пресс, 
2023. – 690 с.: ил. 

ISBN 978-5-93700-114-6

Entity Framework радикально упрощает доступ к данным в приложениях .NET. Этот 
простой в использовании инструмент объектно-реляционного отображения (ORM) 
позволяет писать код базы данных на чистом C#. Он автоматически отображает классы в таблицы базы данных, разрешает запросы со стандартными командами LINQ 
и даже генерирует SQL-код за вас. 
Данная книга научит вас писать код для беспрепятственного взаимодействия с базой данных при работе с приложениями .NET. Следуя соответствующим примерам 
из обширного опыта автора книги, вы быстро перейдете от основ к продвинутым 
методам. Помимо новейших функциональных возможностей EF, в книге рассматриваются вопросы производительности, безопасности, рефакторинга и модульного 
тестирования.
Издание предназначено разработчикам .NET, знакомым с реляционными базами 
данных.

УДК 004.4
ББК 32.372

Original English language edition published by Manning Publications USA, USA. Copyright © 2021 
by Manning Publications. Russian-language edition copyright © 2023 DMK Press. All rights reserved.

Все права защищены. Любая часть этой книги не может быть воспроизведена в какой 
бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав.

ISBN 978-1-6172-9836-3 (англ.) 
© Manning Publications, 2021
ISBN 978-5-93700-114-6 (рус.) 
© Перевод, оформление, издание, ДМК Пресс, 2022

Под редакцией сообщества .NET разработчиков DotNet.Ru

Оглавление

 Часть I  НАЧАЛО .................................................................................................34
 
1  Введение в Entity Framework Core .........................................................36
 
2  Выполнение запроса к базе данных ......................................................63
 
3  Изменение содержимого базы данных ...............................................102
 
4  Использование EF Core в бизнес-логике .............................................139
 
5  Использование EF Core в веб-приложениях ASP.NET Core ................175
 
6  Советы и техники, касающиеся чтения и записи данных  
 
     с EF Core ................................................................................................215

 Часть II  ОБ ENTITY FRAMEWORK В ДЕТАЛЯХ ...........................................250
 
7  Настройка нереляционных свойств ....................................................252
 
8  Конфигурирование связей ...................................................................291
 
9  Управление миграциями базы данных ...............................................339
 
10  Настройка расширенных функций и разрешение конфликтов   
 
     параллельного доступа ........................................................................382
 
11  Углубляемся в DbContext ......................................................................420

 Часть III  ИСПОЛЬЗОВАНИЕ ENTITY FRAMEWORK CORE  
 
     В РЕАЛЬНЫХ ПРИЛОЖЕНИЯХ .......................................................462
 
12  Использование событий сущности для решения проблем  
 
     бизнес-логики .......................................................................................464
 
13  Предметно-ориентированное проектирование  и другие  
 
     архитектурные подходы ......................................................................492
 
14  Настройка производительности в EF Core ..........................................530
 
15  Мастер-класс по настройке производительности запросов  
 
     к базе данных ........................................................................................561
 
16  Cosmos DB, CQRS и другие типы баз данных ......................................595
 
17  Модульное тестирование приложений, использующих EF Core .......634

Содержание

Предисловие  ............................................................................................................... 21
Введение ...................................................................................................................... 23
Благодарности ............................................................................................................ 25
Об этой книге ............................................................................................................. 26
Об авторе ................................................................................................................... 32
Об изображении на обложке ....................................................................................... 33

Часть I НАЧАЛО ............................................................................................................. 34
1 

Введение в Entity Framework Core .................................................... 36

1.1 
Что вы узнаете из этой книги ....................................................................... 37

1.2 
Мой «момент озарения» ................................................................................ 38

1.3 
Несколько слов для разработчиков EF6.x ..................................................... 40

1.4 
Обзор EF Core ................................................................................................. 40
1.4.1 
Недостатки инструментов объектно-реляционного отображения ..... 41

1.5 
Что насчет нереляционных (NoSQL) баз данных? ....................................... 42

1.6 
Ваше первое приложение, использующее EF Core ...................................... 42
1.6.1 
Что нужно установить ....................................................................... 43
1.6.2 
Создание собственного консольного приложения .NET Core  
 
с помощью EF Core ............................................................................... 44

1.7 
База данных, к которой будет обращаться MyFirstEfCoreApp .................... 45

1.8 
Настройка приложения MyFirstEfCoreApp ................................................... 47
1.8.1 
Классы, которые отображаются в базу данных: Book и Author ............ 47
1.8.2 
DbContext ............................................................................................ 48

1.9 
Заглянем под капот EF Core .......................................................................... 49
1.9.1 
Моделирование базы данных ................................................................ 50
1.9.2 
Чтение данных .................................................................................... 51
1.9.3 
Обновление .......................................................................................... 54

1.10 
Этапы разработки EF Core ............................................................................. 57

1.11 
Стоит ли использовать EF Core в своем следующем проекте? ................... 58
1.11.1 
.NET – это программная платформа будущего, и она будет быстрой! ... 58
1.11.2 
Открытый исходный код и открытые сообщения ................................ 59
1.11.3 
Мультиплатформенные приложения и разработка ............................. 59
1.11.4 
Быстрая разработка и хорошие функциональные возможности .......... 59
1.11.5 
Хорошая поддержка ............................................................................. 60
1.11.6 
Всегда высокая производительность .................................................... 60

1.12 
Когда не следует использовать EF Core?....................................................... 61

Резюме ........................................................................................................................ 61

Содержание
2 

Выполнение запроса к базе данных ................................................ 63

2.1 
Закладываем основу: наш сайт по продаже книг ........................................ 64
2.1.1 
Реляционная база данных приложения Book App ................................... 64
2.1.2 
Другие типы связей, не описанные в этой главе ................................... 67
2.1.3 
База данных – все таблицы .................................................................. 68
2.1.4 
Классы, которые EF Core отображает в базу данных ........................... 70

2.2 
Создание DbContext ....................................................................................... 72
2.2.1 
Определение DbContext приложения: EfCoreContext .............................. 72
2.2.2 
Создание экземпляра DbContext приложения ........................................ 73
2.2.3 
Создание базы данных для своего приложения ...................................... 74

2.3 
Разбираемся с запросами к базе данных ..................................................... 75
2.3.1 
Доступ к свойству DbContext приложения ........................................... 76
2.3.2 
Серия команд LINQ / EF Core ................................................................ 76
2.3.3 
Команда выполнения ........................................................................... 76
2.3.4 
Два типа запросов к базе данных ......................................................... 77

2.4 
Загрузка связанных данных .......................................................................... 78
2.4.1 
Немедленная загрузка: загрузка связей с первичным классом  
 
сущности ............................................................................................ 78
2.1.2 
Явная загрузка: загрузка связей после первичного класса сущности ...... 81
2.4.3 
Выборочная загрузка: загрузка определенных частей первичного  
 
класса сущности и любых связей .......................................................... 82
2.4.4 
Отложенная загрузка: загрузка связанных данных по мере  
 
необходимости .................................................................................... 83

2.5 
Использование вычисления на стороне клиента : адаптация  
 
данных на последнем этапе запроса ............................................................ 85

2.6 
Создание сложных запросов ......................................................................... 88

2.7 
Знакомство с архитектурой приложения Book App .................................... 92

2.8 
Добавляем сортировку, фильтрацию и разбиение на страницы ................ 93
2.8.1 
Сортировка книг по цене, дате публикации и оценкам покупателей .... 94
2.8.2 
Фильтрация книг по году публикации, категориям и оценкам  
 
покупателей ........................................................................................ 95
2.8.3 
Другие параметры фильтрации: поиск текста по определенной  
 
строке ................................................................................................. 96
2.8.4 
Разбиение книг на страницы в списке .................................................. 98

2.9 
Собираем все вместе: объединение объектов запроса ............................... 99

Резюме ...................................................................................................................... 100

3 

Изменение содержимого базы данных ....................................... 102

3.1 
Представляем свойство сущности State ..................................................... 103

3.2 
Создание новых строк в таблице ................................................................ 103
3.2.1 
Самостоятельное создание отдельной сущности .............................. 104
3.2.2 
Создание книги с отзывом ................................................................. 105

3.3 
Обновление строк базы данных ................................................................. 109
3.3.1 
Обработка отключенных обновлений в веб-приложении .................... 111

3.4 
Обработка связей в обновлениях ............................................................... 117
3.4.1 
Основные и зависимые связи .............................................................. 118
3.4.2 
Обновление связей «один к одному»: добавляем PriceOffer в книгу ....... 119
3.4.3 
Обновление связей «один ко многим»: добавляем отзыв в книгу .......... 123
3.4.4 
Обновление связи «многие ко многим» ................................................ 127
3.4.5 
Расширенная функция: обновление связей через внешние ключи ......... 132

3.5 
Удаление сущностей .................................................................................... 133
3.5.1 
Мягкое удаление: использование глобального фильтра запросов,  
 
чтобы скрыть сущности ................................................................... 133
3.5.2 
Удаление только зависимой сущности без связей ............................... 135

Содержание

3.5.3 
Удаление основной сущности, у которой есть связи ........................... 135
3.5.4 
Удаление книги с зависимыми связями ............................................... 136

Резюме ...................................................................................................................... 137

4 

Использование EF Core в бизнес-логике .................................... 139

4.1 
Вопросы, которые нужно задать, и решения, которые нужно  
 
принять , прежде чем начать писать код .................................................... 140
4.1.1 
Три уровня сложности кода бизнес-логики ......................................... 141

4.2 
Пример сложной бизнес-логики: обработка заказа на приобретение  
 
книги ............................................................................................................. 143

4.3 
Использование паттерна проектирования для реализации   
 
сложной бизнес-логики ............................................................................... 144
4.3.1 
Пять правил по созданию бизнес-логики, использующей EF Core ......... 144

4.4 
Реализация бизнес-логики для обработки заказа ..................................... 146
4.4.1 
Правило 1: бизнес-логика требует определения структуры  
 
базы данных ...................................................................................... 147
4.4.2 
Правило 2: ничто не должно отвлекать от бизнес-логики ................. 148
4.4.3 
Правило 3: бизнес-логика должна думать, что работает  
 
с данными в памяти .......................................................................... 149
4.4.4 
Правило 4: изолируйте код доступа к базе данных в отдельный  
 
проект .............................................................................................. 152
4.4.5 
Правило 5: бизнес-логика не должна вызывать метод EF Core,  
 
SaveChanges ....................................................................................... 153
4.4.6 
Собираем все вместе: вызов бизнес-логики для обработки заказов .... 156
4.4.7 
Размещение заказа в приложении Book App ........................................ 157
4.4.8 
Плюсы и минусы паттерна сложной бизнес-логики ............................ 159

4.5 
Пример простой бизнес-логики: ChangePriceOfferService ....................... 159
4.5.1 
Мой подход к проектированию простой бизнес-логики ...................... 160
4.5.2 
Пишем код класса ChangePriceOfferService .......................................... 160
4.5.3 
Плюсы и минусы этого паттерна бизнес-логики................................ 161

4.6 
Пример валидации: добавление отзыва в книгу с проверкой ................. 162
4.6.1 
Плюсы и минусы этого паттерна бизнес-логики................................ 163

4.7 
Добавление дополнительных функций в обработку вашей  
 
бизнес-логики .............................................................................................. 163
4.7.1 
Валидация данных, которые вы записываете в базу ........................... 164
4.7.2 
Использование транзакций для объединения кода бизнес-логики  
 
в одну логическую атомарную операцию ............................................ 168
4.7.3 
Использование класса RunnerTransact2WriteDb .................................. 172

Резюме ...................................................................................................................... 173

5 

Использование EF Core в веб-приложениях  
 
ASP.NET Core .................................................................................................. 175

5.1 
Знакомство с ASP.NET Core ......................................................................... 176

5.2 
Разбираемся с архитектурой приложения Book App................................. 176

5.3 
Внедрение зависимостей ............................................................................ 177
5.3.1 
Почему нужно знать, что такое внедрение зависимостей,  
 
работая с ASP.NET Core .................................................................... 179
5.3.2 
Базовый пример внедрения зависимостей в ASP.NET Core .................. 179
5.3.3 
Жизненный цикл сервиса, созданного внедрением зависимостей ........ 180
5.3.4 
Особые соображения, касающиеся приложений Blazor Server ............... 182

5.4 
Делаем DbContext приложения доступным, используя внедрение  
 
зависимостей ............................................................................................... 182
5.4.1 
Предоставление информации о расположении базы данных ............... 183

Содержание

5.4.2 
Регистрация DbContext приложения у поставщика внедрения  
 
зависимостей .................................................................................... 184
5.4.3 
Регистрация фабрики DbContext у поставщика внедрения  
 
зависимостей .................................................................................... 185

5.5 
Вызов кода доступа к базе данных из ASP.NET Core ................................. 186
5.5.1 
Краткое изложение того, как работает паттерн ASP.NET  
 
Core MVC, и термины, которые он использует ................................... 187
5.5.2 
Где находится код EF Core в приложении Book App? ............................ 187

5.6 
Реализация страницы запроса списка книг ............................................... 189
5.6.1 
Внедрение экземпляра DbContext приложения через внедрение  
 
зависимостей .................................................................................... 189
5.6.2 
Использование фабрики DbContext для создания экземпляра  
 
DbContext .......................................................................................... 191

5.7 
Реализация методов базы данных как сервиса внедрения  
 
зависимостей ............................................................................................... 193
5.7.1 
Регистрация класса в качестве сервиса во внедрении зависимостей .... 194
5.7.2 
Внедрение ChangePubDateService в метод действия ASP.NET ............. 195
5.7.3 
Улучшаем регистрацию классов доступа к базе данных как сервисов .. 196

5.8 
Развертывание приложения ASP.NET Core с базой данных...................... 199
5.8.1 
Местонахождение базы данных на веб-сервере .................................. 200
5.8.2 
Создание и миграция базы данных ...................................................... 201

5.9 
Использование функции миграции в EF Core для изменения  
 
структуры  базы данных ............................................................................... 201
5.9.1 
Обновление рабочей базы данных ....................................................... 202
5.9.2 
Заставляем приложение обновить базу данных при запуске............... 203

5.10 
Использование async/await для лучшей масштабируемости.................... 206
5.10.1 
Чем паттерн async/await полезен в веб-приложении,  
 
использующем EF Core ....................................................................... 207
5.10.2 
Где использовать async/await для доступа к базе данных? .....................208
5.10.3 
Переход на версии команд EF Core с async/await .................................. 208

5.11 
Выполнение параллельных задач: как предоставить DbContext ............. 210
5.11.1 
Получение экземпляра DbContext для параллельного запуска .............. 211
5.11.2 
Запуск фоновой службы в ASP.NET Core ............................................. 212
5.11.3 
Другие способы получения нового экземпляра DbContext ..................... 213

Резюме ...................................................................................................................... 213

6 

Советы и техники, касающиеся чтения  
 
и записи данных с EF Core .................................................................... 215

6.1 
Чтение из базы данных ............................................................................... 216
6.1.1 
Этап ссылочной фиксации в запросе .................................................. 216
6.1.2 
Понимание того, что делает метод AsNoTracking  
 
и его разновидности .......................................................................... 218
6.1.3 
Эффективное чтение иерархических данных ...................................... 220
6.1.4 
Понимание того, как работает метод Include .................................. 222
6.1.5 
Обеспечение отказоустойчивости загрузки навигационных  
 
коллекций .......................................................................................... 224
6.1.6 
Использование глобальных фильтров запросов в реальных ситуациях ... 225
6.1.7 
Команды LINQ, требующие особого внимания .................................... 230
6.1.8 
Использование AutoMapper для автоматического построения  
 
запросов с методом Select .................................................................. 232
6.1.9 
Оценка того, как EF Core создает класс сущности при чтении  
 
данных............................................................................................... 235

6.2 
Запись данных в базу с EF Core ................................................................... 240
6.2.1 
Оценка того, как EF Core записывает сущности или связи  

Содержание

 
в базу данных ..................................................................................... 240
6.2.2 
Оценка того, как DbContext обрабатывает запись сущностей  
 
и связей ............................................................................................. 242
6.2.3 
Быстрый способ копирования данных со связями ............................... 246
6.2.4 
Быстрый способ удалить сущность ................................................... 247

Резюме ...................................................................................................................... 248

Часть II 
ОБ ENTITY FRAMEWORK В ДЕТАЛЯХ ................ 250

7 

Настройка нереляционных свойств ........................................... 252

7.1 
Три способа настройки EF Core................................................................... 253

7.2 
Рабочий пример настройки EF Core ........................................................... 254

7.3 
Конфигурация по соглашению ................................................................... 257
7.3.1 
Соглашения для классов сущностей .................................................... 257
7.3.2 
Соглашения для параметров в классе сущности ................................. 258
7.3.3 
Условные обозначения для имени, типа и размера ............................. 258
7.3.4 
По соглашению поддержка значения NULL для свойства  
 
основана на типе .NET ...................................................................... 259
7.3.5 
Соглашение об именах EF Core определяет первичные ключи .............. 259

7.4 
Настройка с помощью аннотаций данных ................................................ 260
7.4.1 
Использование аннотаций из пространства имен  
 
System.ComponentModel.DataAnnotations ........................................... 261
7.4.2 
Использование аннотаций из пространства имен  
 
System.ComponentModel.DataAnnotations.Schema ............................... 261

7.5 
Настройка с использованием Fluent API .................................................... 261

7.6 
Исключение свойств и классов из базы данных ........................................ 264
7.6.1 
Исключение класса или свойства с помощью Data Annotations ............ 264
7.6.2 
Исключение класса или свойства с помощью Fluent API ...................... 265

7.7 
Установка типа, размера и допустимости значений NULL  
 
для столбца базы данных ............................................................................ 266

7.8 
Преобразование значения: изменение данных при чтении  
 
из базы данных  или записи в нее ............................................................... 267

7.9 
Различные способы настройки первичного ключа ................................... 269
7.9.1 
Настройка первичного ключа с помощью Data Annotations ................. 269
7.9.2 
Настройка первичного ключа через Fluent API ................................... 270
7.9.3 
Настройка сущности как класса с доступом только на чтение ......... 270

7.10 
Добавление индексов в столбцы базы данных .......................................... 271

7.11 
Настройка именования на стороне базы данных...................................... 272
7.11.1 
Настройка имен таблиц ................................................................... 273
7.11.2 
Настройка имени схемы и группировки схем ...................................... 273
7.11.3 
Настройка имен столбцов базы данных в таблице ............................ 274

7.12 
Настройка глобальных фильтров запросов ............................................... 274

7.13 
Применение методов Fluent API в зависимости от типа  
 
поставщика  базы данных ............................................................................ 275

7.14 
Теневые свойства: сокрытие данных столбца внутри EF Core ................. 276
7.14.1 
Настройка теневых свойств ............................................................. 277
7.14.2 
Доступ к теневым свойствам ........................................................... 277

7.15 
Резервные поля: управление доступом к данным в классе сущности ..... 278
7.15.1 
Создание простого резервного поля, доступного через  
 
свойство чтения/записи .................................................................... 279
7.15.2 
Создание столбца с доступом только на чтение................................ 279
7.15.3 
Сокрытие даты рождения внутри класса .......................................... 280
7.15.4 
Настройка резервных полей............................................................... 281

7.16 
Рекомендации по использованию конфигурации EF Core ....................... 283