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

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

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 277 278 279 280 281 282 283 284 285 ... 407
Перейти на страницу:
проблемы с тем, каким образом система миграции транслирует принадлежащие сущности, когда они используются с необязательным отношением. Для исправления проблемы потребуется сделать отношение обязательным.

Решить задачу можно двумя способами. Первый — включить допустимость null на уровне проекта или в классах С#. Тогда навигационное свойство PersonalInformation становится не допускающим значение null, что исполняющая среда EF Core учитывает и соответствующим образом конфигурирует столбцы в принадлежащей сущности. Второй способ предусматривает добавление кода Fluent API для того, чтобы сделать навигационное свойство обязательным:

modelBuilder.Entity<Customer>(entity =>

{

  entity.OwnsOne(o => o.PersonalInformation,

      pd =>

      {

        pd.Property<string>(nameof(Person.FirstName))

             .HasColumnName(nameof(Person.FirstName))

             .HasColumnType("nvarchar(50)");

        pd.Property<string>(nameof(Person.LastName))

             .HasColumnName(nameof(Person.LastName))

             .HasColumnType("nvarchar(50)");

      });

  entity.Navigation(c => c.PersonalInformation).IsRequired(true);

});

Существуют дополнительные аспекты для исследования с помощью принадлежащих сущностей, в том числе коллекции, разбиение таблиц и вложение, но они выходят за рамки тематики настоящей книги. За более подробной информацией о принадлежащих сущностях обращайтесь в документацию по EF Core: https://docs.microsoft.com/ru-ru/ef/core/modeling/owned-entities.

Сопоставление с функциями базы данных

Функции SQL Server можно сопоставлять с методами C# и включать в операторы LINQ. В таком случае метод C# служит просто заполнителем, поскольку в генерируемый запрос SQL внедряется серверная функция. Поддержка сопоставления с табличными функциями была добавлена в EF Core к уже имеющейся поддержке сопоставления со скалярными функциями. Дополнительные сведения о сопоставлении с функциями базы данных ищите в документации: https://docs.microsoft.com/ru-ru/ef/core/querying/user-defined-function-mapping.

Команды CLI глобального инструмента EF Core

Глобальный инструмент командной строки EF Core под названием dotnet-ef содержит команды, необходимые для создания шаблонов существующих баз данных в коде, для создания/удаления миграций баз данных и для работы с базой данных (обновление, удаление и т.п.). Чтобы пользоваться глобальным инструментом dotnet-ef, вы должны его установить с помощью следующей команды (если вы прорабатывали материал главы с самого начала, то уже сделали это):

dotnet tool install -- global dotnet-ef — version 5.0.1

На заметку! Из-за того, что EF Core 5 не является выпуском с долгосрочной поддержкой (LTS) при использовании глобальных инструментов EF Core 5 потребуется указывать версию.

Для проверки результата установки откройте окно командной строки и введите такую команду:

dotnet ef

Если глобальный инструмент был успешно установлен, тогда вы получите схематическое изображение единорога EF Core (талисмана команды разработчиков) и список доступных команд, подобный показанному ниже (на экране единорог выглядит лучше):

               _/__

         ---==/     \

  ___ ___     |.      |

 |__||__| |   )     \

 |_||_|   _/ |   //|\

 |__||_|     /    \/\

Entity Framework Core .NET Command-line Tools 5.0.1

Usage: dotnet ef [options] [command]

Options:

  --version        Show version information

  -h|--help        Show help information

  -v|--verbose     Show verbose output.

  --no-color       Don't colorize output.

  --prefix-output  Prefix output with level.

Commands:

  database    Commands to manage the database.

  dbcontext   Commands to manage DbContext types.

  migrations  Commands to manage migrations.

Use "dotnet ef [command] --help" for more information about a command.

Использование: dotnet ef [параметры] [команда]

Параметры:

    --version                Показать информацию о версии.

    -h|--help                Показать справочную информацию.

    -v --verbose           Включить многословный вывод.

    --no-color               Не использовать цвета в выводе.

    --prefix-output       Снабжать вывод префиксами для выделения уровней.

Команды:

    database                  Команды для управления базой данных.

    dbcontext                Команды для управления типами DbContext.

    migrations               Команды для управления миграциями.

Для получения дополнительной информации о команде применяйте dotnet ef [команда] --help.

В табл. 22.9 описаны три основных команды глобального инструмента EF Core. С каждой основной командой связаны дополнительные подкоманды. Как и все команды .NET Core, каждая команда имеет развитую справочную систему, которая доступна после ввода -h вместе с командой.

Команды EF Core выполняются в отношении файлов проектов .NET Core (не файлов решений). Целевой проект должен ссылаться на пакет NuGet инструментов EF Core по имени Microsoft.EntityFrameworkCore.Design. Команды работают с файлом проекта, расположенным в том же каталоге, где команды вводятся, или с файлом проекта из другого каталога в случае ссылки на него через параметры командной строки.

Для команд CLI глобального инструмента EF Core, которым требуется экземпляр класса, производного от DbContext (Database и Migrations), при наличии в проекте только одного такого экземпляра именно он и будет использоваться. Если экземпляров DbContext несколько, тогда конкретный экземпляр необходимо указывать в параметре командной строки. Экземпляр производного от DbContext класса будет создаваться с применением экземпляра класса, реализующего интерфейс IDesignTimeDbContextFactory<TContext>, если инструмент смог его обнаружить.

Если инструменту не удалось его найти, то экземпляр класса, производного от DbContext, будет создаваться с использованием конструктора без параметров. Если ни того и ни другого не существует, тогда команда потерпит неудачу. Обратите внимание, что вариант с конструктором без параметров требует наличия переопределенной версии OnConfiguring(), что не считается хорошей практикой.

Лучший (и на самом деле единственный) вариант — всегда создавать реализацию IDesignTimeDbContextFactory<TContext> для каждого класса, производного от DbContext, который присутствует в приложении.

Чтобы вывести список всех аргументов и параметров для команды, введите dotnet ef <команда> -h в окне командной строки, например:

dotnet ef migrations add -h

На заметку! Важно отметить, что команды CLI — это не команды С#, а потому правила отмены символов обратной косой черты и кавычек здесь не применяются.

Команды для управления миграциями

Команды migrations используются для добавления, удаления, перечисления и создания сценариев миграций. После того, как миграция применена к базе данных, в таблице __EFMigrationsHistory создается запись. Команды для управления миграциями кратко описаны в табл. 22.11 и более подробно в последующих подразделах.

Команда add

Команда add создает новую миграцию базы данных, основываясь на текущей объектной модели. Процесс исследует каждую сущность со свойством DbSet<T> в производном от DbContext классе (и каждую сущность, которая может быть

1 ... 277 278 279 280 281 282 283 284 285 ... 407
Перейти на страницу:

Комментарии
Минимальная длина комментария - 20 знаков. В коментария нецензурная лексика и оскорбления ЗАПРЕЩЕНЫ! Уважайте себя и других!
Комментариев еще нет. Хотите быть первым?