首页 > 解决方案 > 实体框架核心 npgsql 迁移改变序列错误

问题描述

我有这样的迁移

migrationBuilder.AlterColumn<int>(
    name: "Id",
    schema: "{table-schema}",
    table: "{table-name}",
    nullable: false,
    oldClrType: typeof(int))
    .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.SerialColumn);

它产生一个这样的sql

DO $$
BEGIN
    IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '{migration-name}') THEN
        ALTER TABLE {table-schema}."{table-name}" ALTER COLUMN "Id" TYPE integer;
        ALTER TABLE {table-schema}."{table-name}" ALTER COLUMN "Id" SET NOT NULL;
        CREATE SEQUENCE "{table-schema}_Id_seq" AS integer START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE NO CYCLE;
    END IF;
END $$;

其次是

DO $$
BEGIN
    IF NOT EXISTS(SELECT 1 FROM "__EFMigrationsHistory" WHERE "MigrationId" = '{migration-name') THEN
        ALTER TABLE {table-schema}."{migration-name}" ALTER COLUMN "Id" SET DEFAULT (nextval('"{table-name}_Id_seq"'));
        ALTER SEQUENCE "{table-name}_Id_seq" OWNED BY "{table-name}"."Id";
    END IF;
END $$;

我在迁移过程中收到以下错误:System.Exception: 42P01: relation "{table-name}" does not exist.

这里有什么问题?

当我手动运行 sql 时,在 ALTER SEQUENCE 行出现错误。我正在使用 npgsql 提供程序 2.1.2 并在 postgresql 9.5 和 11 上都尝试过。

标签: postgresqlentity-framework-coreentity-framework-migrations

解决方案


推荐阅读