опустить столбец в Sqlite Migration - PullRequest
0 голосов
/ 18 декабря 2018

Я использую EntityFrameworkCore.Sqlite, и я хочу использовать миграцию, все работает нормально, но когда я хочу удалить столбец, я не могу обновить базу данных.Я знаю, что у Sqlite есть ограничение.

Это мой способ решения этой проблемы:

1.Создать новую таблицу
2.Вставить данные oldTable в новую таблицу
3. Удалите oldTable
4. Переименуйте новую таблицу в oldtable

protected override void Down(MigrationBuilder migrationBuilder)
{
    migrationBuilder.CreateTable(name: "XSettings",
       columns: table => new
       {
           Id = table.Column<int>(nullable: false)
               .Annotation("Sqlite:Autoincrement", true),
           Name = table.Column<string>(nullable: true),
           LName = table.Column<string>(nullable: true)
       },
       constraints: table =>
       {
           table.PrimaryKey("PK_Settings", x => x.Id);
       });

    migrationBuilder.Sql("ALTER TABLE Settings DROP COLUMN HName;");
    migrationBuilder.Sql("INSERT INTO XSettings * FROM Settings;");

    migrationBuilder.DropTable(name: "Settings");
    migrationBuilder.Sql("ALTER TABLE XSettings RENAME TO Settings;");
}

, но когда я запускаю мое приложение, столбец HName все еще существует, так как я могу удалить столбец?

1 Ответ

0 голосов
/ 20 марта 2019

Использовать SQLiteStudio

Чтобы выполнить операцию удаления столбца, вы должны предоставить строковый код SQL начиная с ограничений SQLite. Документы Microsoft: ограничения SQLite

  1. Загрузите SQLiteStudio с SQLiteStudio сайта

  2. Загрузитефайл локальной базы данных

  3. Удалите нужный столбец, и с помощью «Подтверждение изменения структуры» (зеленая кнопка «ОК») отображаются операторы SQL
  4. Скопируйте сгенерированный код для миграции и затемскопируйте его в оператор migrationBuilder.Sql("..."); или вы можете разделить его на несколько операторов

Просто обратите внимание при копировании в C #

SQLiteStudio generated SQLite Statements

...