【问题标题】:EF Core ValueGeneratedOnAdd does not work with postgresqlEF Core ValueGeneratedOnAdd 不适用于 postgresql
【发布时间】:2019-05-04 06:15:19
【问题描述】:

当使用 Assembly IdentityServer4.EntityFramework.Storage 中的 ConfigurationDbContext 时

并使用IdentityServer4.Models.Client 实体播种数据库

我收到以下错误:PostgresException: 23502: "Id" 列中的空值违反非空约束

我查看了数据库,结果发现该列的类型为integer,尽管我希望它是serial

您可以在下面看到负责创建列的部分迁移代码:

 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, 在integer 列上调用ValueGeneratedOnAdd() 应该会在数据库中产生serial 类型。

对此有什么想法吗?

【问题讨论】:

    标签: entity-framework entity-framework-core asp.net-core-2.0 npgsql


    【解决方案1】:

    变化

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

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

    已经解决了问题。

    【讨论】:

    【解决方案2】:

    通用提供者的扩展方法。

    public static void HasIdentityAnnotation<T>(this PropertyBuilder<T> builder)
    {
        builder.HasAnnotation("Sqlite:Autoincrement", true)
            .HasAnnotation("MySql:ValueGeneratedOnAdd", true)
            .HasAnnotation("Npgsql:ValueGenerationStrategy", 
    Npgsql.EntityFrameworkCore.PostgreSQL.Metadata.NpgsqlValueGenerationStrategy.SerialColumn)
            .HasAnnotation("SqlServer:ValueGenerationStrategy", Microsoft.EntityFrameworkCore.Metadata.SqlServerValueGenerationStrategy.IdentityColumn);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-19
      • 1970-01-01
      • 2020-05-28
      • 2021-01-11
      • 1970-01-01
      相关资源
      最近更新 更多