Язык программирования C#9 и платформа .NET5
"Сначала код" или "сначала база данных"
Прежде чем приступить к построению уровня доступа к данным, давайте обсудим два способа работы с EF Core и базой данных: "сначала код" или "сначала база данных". Оба они совершенно допустимы, а выбор применяемого подхода в значительной степени зависит от самой команды разработчиков.
Подход "сначала код" означает, что вы создаете и конфигурируете свои сущностные классы и производный от
класс в коде и затем используете миграции для обновления базы данных. Подобным образом разрабатывается большинство новых проектов. Преимущество подхода "сначала код" заключается в том, что в ходе построения приложения сущности развиваются на основе имеющихся у него потребностей. Миграции поддерживают синхронизацию с базой данных, поэтому проектное решение базы данных эволюционирует вместе с приложением. Такой развивающийся процесс проектирования популярен в командах гибкой разработки, поскольку он обеспечивает создание нужных частей в надлежащее время.DbContextЕсли у вас уже есть база данных или вы предпочитаете, чтобы проектное решение базы данных управляло разрабатываемым приложением, тогда должен применяться подход "сначала база данных". Вместо создания производного от
класса и всех сущностных классов вручную вы формируете шаблоны классов из базы данных. В случае изменения базы данных вам придется заново сформировать шаблоны классов для сохранения своего кода в синхронизированном с базой данных состоянии. Любой специальный код в сущностных классах или в классе, производном отDbContext, должен быть помещен в частичные классы, чтобы он не переписывался при повторном создании шаблонов классов. К счастью, именно по этой причине процесс формирования шаблонов строит частичные классы.DbContextКакой бы подход вы ни выбрали, "сначала код" или "сначала база данных", имейте в виду, что он является обязательством. Если вы используете подход "сначала код", то все изменения вносятся в классы сущностей и контекста, а база данных обновляется с применением миграций. Если вы используете подход "сначала база данных", то все изменения должны вноситься в базу данных, после чего будет требоваться повторное создание шаблонов классов. Приложив некоторые усилия по планированию, вы можете переключаться с подхода "сначала база данных" на подход "сначала код" (и наоборот), но не должны вручную вносить изменения в код и базу данных одновременно.
Создание проектов AutoLot.Dal и AutoLot.Models
Уровень доступа к данным
t состоит из двух проектов, один из которых содержит код, специфичный для EF Core (производный отAutoLoкласс, фабрику контекстов, хранилища, миграции и т.д.), а другой — сущности имодели представлений. Создайте новое решение под названиемDbContextи добавьте в него проект библиотеки классов .NET Core по имениChapter23_AllProjects. Удалите стандартный класс, созданный шаблоном, и добавьте в проект следующие пакеты NuGet:AutoLot.ModelsMicrosoft.EntityFrameworkCore.AbstractionsSystem.Text.JsonПакет
обеспечивает доступ ко многим конструкциям EF Core (вроде аннотаций данных) и легковеснее пакетаMicrosoft.EntityFrameworkCore.Abstractions. Добавьте в решение еще один проект библиотеки классов .NET Core по имениMicrosoft.EntityFrameworkCore. Удалите стандартный класс, сгенерированный шаблоном, включите ссылку на проектAutoLot.Dalи добавьте в проект перечисленные далее пакеты NuGet:AutoLot.ModelsMicrosoft.EntityFrameworkCoreMicrosoft.EntityFrameworkCore.SqlServerMicrosoft.EntityFrameworkCore.DesignПакет
предоставляет общую функциональность для EF Core. ПакетMicrosoft.EntityFrameworkCoreпредлагает поставщик данных SQL, а пакетMicrosoft.EntityFrameworkCore.SqlServerтребуется для инструментов командной строки EF Core.Microsoft.EntityFrameworkCore.DesignЧтобы выполнить все указанные ранее шаги в командной строке, введите показанные ниже команды (в каталоге, где хотите создать решение):
dotnet new sln -n Chapter23_AllProjectsdotnet new classlib -lang c# -n AutoLot.Models -o .\AutoLot.Models -f net5.0dotnet sln .\Chapter23_AllProjects.sln add .\AutoLot.Modelsdotnet add AutoLot.Models package Microsoft.EntityFrameworkCore.Abstractionsdotnet add AutoLot.Models package System.Text.Jsondotnet new classlib -lang c# -n AutoLot.Dal -o .\AutoLot.Dal -f net5.0dotnet sln .\Chapter23_AllProjects.sln add .\AutoLot.Daldotnet add AutoLot.Dal reference AutoLot.Modelsdotnet add AutoLot.Dal package Microsoft.EntityFrameworkCoredotnet add AutoLot.Dal package Microsoft.EntityFrameworkCore.Designdotnet add AutoLot.Dal package Microsoft.EntityFrameworkCore.SqlServerdotnet add AutoLot.Dal package Microsoft.EntityFrameworkCore.ToolsНа заметку! В случае работы на машине с операционной системой, отличающейся от Windows, используйте символ разделителя каталогов, который принят в вашей системе.
Поступать так придется в отношении всех команд CLI, приводимых в настоящей главе. После создания проектов обновите каждый файл
для включения ссылочных типов, допускающих*.csproj, из версии C# 8. Обновление выделено полужирным:null<PropertyGroup><TargetFramework>net5.0</TargetFramework><b> <Nullable>enable</Nullable></b></PropertyGroup>Создание шаблонов для класса, производного от DbContext, и сущностных классов
Следующий шаг предусматривает формирование шаблонов для базы данных
из главы 21 с применением инструментов командной строки EF Core. Перейдите в каталог проектаAutoLotв окне командной строки или в консоли диспетчера пакетов Visual Studio.AutoLot.DalНа заметку! В папке Chapter_21 хранилища GitHub для этой книги находятся резервные копии базы данных, ориентированные на Windows и Docker. За инструкциями по восстановлению базы данных обращайтесь в главу 21.