KnigaRead.com/
KnigaRead.com » Компьютеры и Интернет » Базы данных » Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Троелсен Эндрю, "Язык программирования C#9 и платформа .NET5" бесплатно, без регистрации.
Перейти на страницу:

Воспользуйтесь инструментами командной строки EF Core, чтобы сформировать для базы данных

AutoLot
шаблоны сущностных классов и класса, производного от
DbContext
. Вот как выглядит команда(которая должна вводиться в одной строке):

dotnet ef dbcontext scaffold "server=.,5433;Database=AutoLot;

User Id=sa;Password=P@ssw0rd;"

Microsoft.EntityFrameworkCore.SqlServer

 -d -c ApplicationDbContext --context-namespace

AutoLot.Dal.EfStructures --context-dir EfStructures

 --no-onconfiguring -n AutoLot.Models.

Entities -o ..AutoLot.ModelsEntities

Предыдущая команда формирует шаблоны для базы данных, находящейся по заданной строке подключения (для контейнера Docker, применяемого в главе 21), с использованием поставщика баз данных SQL Server. Флаг

-d
заставляет, где возможно, отдавать предпочтение аннотациям данных (перед Fluent API). В
указывается имя контекста, в
--context-namespaces
— пространство имен для контекста, в
--context-dir
— каталог (относительно каталога текущего проекта) для контекста. С помощью
--no-onconfiguring
исключается метод
OnConfiguring()
. В
задается выходной каталог для файлов сущностных классов (относительно каталога текущего проекта) и, наконец, в
-n
— пространство имен для сущностных классов. Показанная выше команда помещает все сущности в каталог
Entities
проекта
AutoLot.Models
, а класс
ApplicationDbContext
— каталог
EfStructures
проекта
AutoLot.Dal
.

Вы заметите, что шаблон для хранимой процедуры не создавался. Если бы в базе данных присутствовали какие-то представления, то для них были бы созданы шаблоны сущностей без ключей. Поскольку в EF Core не предусмотрено конструкций, напрямую отображаемых на хранимые процедуры, создать шаблон невозможно. С применением EF Core можно создавать хранимые процедуры и другие объекты SQL, но на этот раз шаблоны формируются только для таблиц и представлений.

Переключение на подход "сначала код"

Теперь, имея базу данных, для которой сформированы сущности, самое время переключиться с подхода "сначала база данных" на подход "сначала код". Для такого переключения должна быть создана фабрика контекстов, а также миграция из текущего состояния проекта. Затем либо база данных удаляется и воссоздается за счет применения миграции, либо задействуется фиктивная реализация для "обмана" инфраструктуры EF Core.

Создание фабрики экземпляров класса, производного от DbContext, на этапе проектирования

Как было указано в главе 22, инструменты командной строки EF Core используют реализацию

IDesignTimeDbContextFactory
для создания экземпляра класса, производного от
DbContext
. Создайте в каталоге
EfStructures
проекта
AutoLot.Dal
новый файл класса по имени
ApplicationDbContextFactory.cs
. Добавьте в файл класса следующие пространства имен:

using System;

using Microsoft.EntityFrameworkCore;

using Microsoft.EntityFrameworkCore.Design;

Детали фабрики раскрывались в предыдущей главе, а здесь представлен только код. Для информационных целей посредством дополнительного вызова

Console.WriteLine()
на консоль выводится строка подключения. Не забудьте привести строку подключения в соответствие со своей средой:

namespace AutoLot.Dal.EfStructures

{

   public class ApplicationDbContextFactory

     : IDesignTimeDbContextFactory<ApplicationDb
Context>

  {

    public ApplicationDbContext CreateDbContext(string[] args)

    {

      var optionsBuilder =

        new DbContextOptionsBuilder<ApplicationDbContext>();

      var connectionString = @"server=.,5433;Database=AutoLot;

      User Id=sa;Password=P@
ssw0rd;";

      optionsBuilder.UseSqlServer(connectionString);

      Console.WriteLine(connectionString);

      return new ApplicationDbContext(optionsBuilder.Options);

    }

  }

}

Создание начальной миграции

Вспомните, что первая миграция создаст три файла: два файла с частичным классом миграции и еще один с полным моментальным снимком модели. Введите в окне командной строки показанную далее команду, находясь в каталоге

AutoLot.Dal
, чтобы создать новую миграцию по имени
Initial
(используя экземпляр только что полученного класса
ApplicationDbContext
) и поместить файлы миграции в каталог
EfStructuresMigrations
проекта
AutoLot.Dal
:

dotnet ef migrations add Initial -o EfStructuresMigrations

 -c AutoLot.Dal.EfStructures.ApplicationDbContext

На заметку! Важно позаботиться о том, чтобы в сгенерированные файлы или базу данных не вносились изменения до тех пор, пока не будет создана и применена начальная миграция. Изменения на любой из сторон приведут к тому, что код и база данных утратят синхронизацию. После применения начальной миграции все изменения должны вноситься в базу данных через миграции EF Core.

Удостоверьтесь в том, что миграция была создана и ожидает применения, выполнив команду

list
:

dotnet ef migrations list -c AutoLot.Dal.EfStructures.ApplicationDbContext

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*