EF Core - добавление миграций в существующий проект и базу данных отдельно - PullRequest
0 голосов
/ 11 октября 2018

У меня есть проект (.Net Core 2.0) и база данных (SQL Server), которые обновляются независимо.Я хотел бы добавить миграции в проект.То, что я уже сделал, это текущая база данных scaffolded и заполнение моего modelBuilder, чтобы оно было эквивалентно моим отношениям с таблицами, а затем создал первую миграцию.В этом начальном сценарии миграции все таблицы удаляются и воссоздаются, и я не хочу потерять свои данные.Например, вот так выглядит мой построитель модели «Адреса»:

builder.ToTable("Addresses");
builder.HasKey(x => x.Id);
builder.Property(e => e.City).HasMaxLength(250);
builder.Property(e => e.Country).HasMaxLength(50);
builder.Property(e => e.Notes).HasColumnType("text");
builder.Property(e => e.Number).HasMaxLength(50);

builder.HasOne(a => a.User).WithMany(u => u.Addresses)
    .HasForeignKey(a => a.UserId);

builder.HasIndex(e => e.UserId)
    .HasName("fkIdx_72");

Вот так это выглядит в моментальном снимке контекста:

b.Property<long>("Id").ValueGeneratedOnAdd();
b.Property<string>("City").HasMaxLength(250);
b.Property<string>("Country").HasMaxLength(50);
b.Property<string>("Notes").HasColumnType("text");
b.Property<string>("Number").HasMaxLength(50);
b.Property<long?>("UserId");
b.HasKey("Id");
b.HasIndex("UserId").HasName("fkIdx_72");
b.ToTable("Addresses");

А вот и первый скрипт миграции.Метод Up:

migrationBuilder.CreateTable(
            name: "Addresses",
            columns: table => new
            {
                Id = table.Column<long>(nullable: false)
                    .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
                City = table.Column<string>(maxLength: 250, nullable: true),
                Country = table.Column<string>(maxLength: 50, nullable: true),
                Notes = table.Column<string>(type: "text", nullable: true),
                Number = table.Column<string>(maxLength: 50, nullable: true),
                UserId = table.Column<long>(nullable: true)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_Addresses", x => x.Id);
                table.ForeignKey(
                    name: "FK_Addresses_Users_UserId",
                    column: x => x.UserId,
                    principalTable: "Users",
                    principalColumn: "Id",
                    onDelete: ReferentialAction.Restrict);
            });

Метод Up:

migrationBuilder.DropTable(
            name: "Addresses");

Почему это обязательно для воссоздания всех таблиц?Я думаю, что в БД чего-то не хватает ... Любая помощь?

...