Заполняем базу данных начальными значениями в миграциях (EntityFramework Core (Code First))

При работе с базами данных нередко возникает необходимость заполнить те или иные таблицы начальными значениями. Штатный механизм миграций в EntityFramework Core позволяет это сделать.

Для того чтобы добавить запись в ранее созданную таблицу следует воспользоваться методом InsertData класса ModelBuilder. Ниже приведён простой пример его вызова с комментариями.

migrationBuilder.InsertData(
    table: "Categories", // Название таблицы
    columns: new[] { "CategoryName" }, // Массив с названиями полей, в которые вносятся значения
    values: new object[] { "Услуги" }); // Массив значений для полей

Более наглядный пример для нескольких полей:

migrationBuilder.InsertData(
    table: "Clients", // Название таблицы
    columns: new[] { "ClientName", "ClientLastName", "Phone"", "CategoryId"  }, // Массив с названиями полей, в которые вносятся значения
    values: new object[] { "Иван", "Иванов", "80001234567", 1 }); // Массив значений для полей

Добавление данных можно поместить в ту же миграцию, которая создаёт таблицу после создания таблицы, необходимых связей и т.д. Пример такой миграции:

namespace DataAccess.Data.Migrations
{
    public partial class Categories : Migration
    {
        protected override void Up(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.CreateTable(
                name: "Categories",
                columns: table => new
                {
                    Id = table.Column<int>(nullable: false, type: "INT IDENTITY(1,1)"),
                    CategoryName = table.Column<string>(nullable: false)
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_Categories", x => x.Id);
                });
            migrationBuilder.InsertData(
                table: "Categories",
                columns: new[] { "CategoryName" },
                values: new object[] { "Автомобили" });
            migrationBuilder.InsertData(
                table: "Categories",
                columns: new[] { "CategoryName" },
                values: new object[] { "Книги" });
            migrationBuilder.InsertData(
                table: "Categories",
                columns: new[] { "CategoryName" },
                values: new object[] { "Мебель" });
            migrationBuilder.InsertData(
                table: "Categories",
                columns: new[] { "CategoryName" },
                values: new object[] { "Услуги" });
        }
        protected override void Down(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.DropTable("Categories");
        }
    }
}

Также при необходимости можно создать отдельную миграцию и выполнить добавление данных в ней.

После того как миграция, которая содержит добавление начальных данных будет выполнена, эти данные появятся в соответствующих таблицах.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *