Миграция, сгенерированная EF Core для Postgresql, дает неправильный синтаксис, это ошибка версии? - PullRequest
0 голосов
/ 28 сентября 2019

Я пытаюсь выяснить, как настроить основной проект .net в linux, используя Postgresql в качестве сервера базы данных.

Я начал с проекта веб-API .net core 2.2 по умолчанию, который предоставляет вам объект WeatherForecast.

Я добавил к этому идентификатор, аннотировал его ключом и произвел первоначальную миграцию;

    protected override void Up(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.CreateTable(
            name: "WeatherForecasts",
            columns: table => new
            {
                Id = table.Column<int>(nullable: false)
                    .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
                Date = table.Column<DateTime>(nullable: false),
                TemperatureC = table.Column<int>(nullable: false),
                Summary = table.Column<string>(nullable: true)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_WeatherForecasts", x => x.Id);
            });
    }

Когда я пытаюсь применить миграцию, я получаю следующую ошибку;

Npgsql.PostgresException (0x80004005): 42601: syntax error at or near "GENERATED"

Ошибка указывает на то, что в базе данных есть проблема со словом 'GENERATED'

Отладчик показывает точный запрос к базе данных;

CREATE TABLE "WeatherForecasts" (
    "Id" integer NOT NULL GENERATED BY DEFAULT AS IDENTITY,
    "Date" timestamp without time zone NOT NULL,
    "TemperatureC" integer NOT NULL,
    "Summary" text NULL,
    CONSTRAINT "PK_WeatherForecasts" PRIMARY KEY ("Id")
);

Я открылокно терминала, подключенное к postgresql cli и непосредственно попробовавшее создание, подтвердило, что слово GENERATED вызывало ошибку.

Есть какие-либо идеи относительно того, что относится к этому GENERATED?Нужно ли устанавливать другую версию postgres?(сейчас 9.6.15)

В моем CsProj есть следующие пакеты для Entity Framework и Postgresql;

"Microsoft.EntityFrameworkCore.Design" Version="3.0.0"

"Npgsql.EntityFrameworkCore.PostgreSQL" Version="3.0.0"

"Npgsql.EntityFrameworkCore.PostgreSQL.Design" Version="1.1.1"

Большое спасибо

1 Ответ

1 голос
/ 30 сентября 2019

Вы, кажется, активируете функцию IDENTITY columns, которая была представлена ​​только в PostgreSQL 10. Я предлагаю вам обновить ее до более новой версии PostgreSQL.

См. https://dba.stackexchange.com/questions/198777/how-to-add-a-postgresql-10-identity-column-to-an-existing-table

"Microsoft.EntityFrameworkCore.Design" Version = "3.0.0"

"Npgsql.EntityFrameworkCore.PostgreSQL" Version = "3.0.0"

"Npgsql.EntityFrameworkCore.PostgreSQL.Design "Version =" 1.1.1 "`

Кроме того, установленные вами пакеты предназначены для asp.net core 3.0, но, похоже, у вас есть проект web-API asp.net core 2.2, которыйможет не поддерживать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...