EF Core ValueGeneratedOnAdd не работает с postgresql - PullRequest
0 голосов
/ 03 декабря 2018

При использовании ConfigurationDbContext из Assembly IdentityServer4.EntityFramework.Storage

И при заполнении базы данных с IdentityServer4.Models.Client сущностью enter image description here

я получаю следующую ошибку: PostgresException:23502: нулевое значение в столбце «Id» нарушает ненулевое ограничение

Я посмотрел на базу данных и оказалось, что столбец имеет тип integer, хотя я и ожидалэто будет serial.enter image description here

Ниже вы можете увидеть части кода миграции, отвечающие за создание столбцов:

 migrationBuilder.CreateTable(
                name: "Clients",
                columns: table => new
                {
                    Id = table.Column<int>(nullable: false)
                        .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),

и

modelBuilder.Entity("IdentityServer4.EntityFramework.Entities.Client", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

На основе документацииhttps://www.npgsql.org/efcore/value-generation.html, вызов ValueGeneratedOnAdd() для столбца integer должен привести к типу serial в базе данных.

Есть мысли по этому поводу?

1 Ответ

0 голосов
/ 03 декабря 2018

Изменение

.Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn)

на

.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.SerialColumn)

решило проблему.

...