Жанры книг
Мы в соц.сетях
ParaKnig📚 » Компьютеры и Интернет » Базы данных » Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
<< На главную

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

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

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 425 426 427 428 429 430 431 432 433 ... 642
Перейти на страницу:

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

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

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

dotnet ef migrations add -h

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

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

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

Команда add

Команда add создает новую миграцию базы данных, основываясь на текущей объектной модели. Процесс исследует каждую сущность со свойством DbSet&lt;T&gt; в производном от DbContext классе (и каждую сущность, которая может быть достигнута из таких сущностей с использованием навигационных свойств) и выясняет, есть ли какие-то изменения, которые должны быть применены к базе данных. При наличии изменений генерируется надлежащий код для обновления базы данных. Вскоре вы узнаете об этом больше.

Команда add требует передачи параметра name, который используется при именовании созданного класса и файлов для миграции. В дополнение к общим параметрам параметр -о &lt;путь&gt; или --output-dir &lt;путь&gt; указывает, куда должны помещаться файлы миграции. Стандартный каталог называется Migrations и относителен к текущему пути.

Для каждой добавленной миграции создаются два файла с частичными определениями того же самого класса. Имена обоих файлов начинаются с отметки времени и наименования миграции, которое было указано в качестве параметра для команды add. Первый файл называется &lt;ГГГГММДДЧЧММСС&gt;_&lt;НаименованиеМиграции&gt;.cs, а второй — &lt;ГГГГММДДЧЧММСС&gt;_&lt;НаименованиеМиграции&gt;.Designer.cs. Отметка времени основана на том, когда файл был создан, и в точности совпадает для обоих файлов. Первый файл представляет код, сгенерированный для изменений базы данных в этой миграции, а конструирующий файл — код, который предназначен для создания и обновления базы данных на основе всех миграций до этой миграции включительно.

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

Главный файл содержит два метода, Up() и Down(). В методе Up() находится код для обновления базы данных с учетом изменений этой миграции. В методе Down() содержится код для выполнения отката изменений этой миграции. Ниже приведен неполный листинг начальной миграции, рассматриваемой ранее в главе (One2Many):

public partial class One2Many : Migration

{

  protected override void Up(MigrationBuilder migrationBuilder)

  {

    migrationBuilder.CreateTable(

      name: &quot;Make&quot;,

      columns: table =&gt; new

        {

          Id = table.Column&lt;int&gt;(type: &quot;int&quot;, nullable: false)

            .Annotation(&quot;SqlServer:Identity&quot;, &quot;1, 1&quot;),

          Name = table.Column&lt;string&gt;(type: &quot;nvarchar(max)&quot;, nullable: true),

          TimeStamp = table.Column&lt;byte[]&gt;(type: &quot;varbinary(max)&quot;,

                                           nullable: true)

        },

        constraints: table =&gt;

        {

          table.PrimaryKey(&quot;PK_Make&quot;, x =&gt; x.Id);

        });

    ...

    migrationBuilder.CreateIndex(

      name: &quot;IX_Cars_MakeId&quot;,

      table: &quot;Cars&quot;,

      column: &quot;MakeId&quot;);

  }

  protected override void Down(MigrationBuilder migrationBuilder)

  {

    migrationBuilder.DropTable(name: &quot;Cars&quot;);

    migrationBuilder.DropTable(name: &quot;Make&quot;);

  }

}

Как видите, метод Up() создает таблицы, столбцы, индексы и т.д. Метод Down() удаляет созданные элементы. По мере необходимости механизм миграции будет выдавать операторы alter, add и drop, чтобы гарантировать соответствие базы данных вашей модели.

Конструирующий файл содержит два атрибута, которые связывают частичные определения с именем файла и классом, производным от DbContext. Ниже показан фрагмент листинга конструирующего класса с упомянутыми атрибутами:

1 ... 425 426 427 428 429 430 431 432 433 ... 642
Перейти на страницу:
На этой странице вы можете бесплатно читать книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю бесплатно.
Комментарии
Открыть боковую панель
Комментарии
Лариса
Лариса 11.03.2026 - 20:17
Странно,здесь имя девочки Аграфена,а на других сайтах я прослушала три книги этого цикла с именем Дарвина.Зачем менять имя и путать читателей? Опечатка- не Дарвина,  а  Дарина.
Григорий
Григорий 09.04.2025 - 22:24
Лучшая книга всех времен
Женя
Женя 02.04.2025 - 16:08
Любимая книга