Npgsql EntitiyFramework不能将记录添加到表中,只有一个整数作为主键

时间:2017-03-24 07:23:48

标签: c# postgresql entity-framework npgsql

当我尝试将Record添加到只包含一列MandantId作为整数主键的表时,我遇到了问题。此列自动递增。当我尝试添加记录时,我收到以下错误消息: " 23502:列中的空值" mandantid"违反了非空约束"

我用的是什么:

  1. PostgreSQL 9.6
  2. EntityFramework 6.1.3
  3. EntityFramework6.Npgsql 3.1.1
  4. Npgsql 3.1.2
  5. 如果我使用INSERT查询,例如: _context.Database.ExecuteSqlCommand(string.Format(" INSERT INTO public.mandant(mandantid)VALUES({0});"),MandantId)); 它有效!

    但我不想使用修复查询。 我已经尝试了什么:

    1. 使用EF的Add()和SaveChanges()函数,一次使用0和一次有效整数,同样的错误
    2. 删除了对数据库和EF的所有依赖项,同样的错误
    3. 使用有效的插入脚本
    4. 添加了一个名为id的附加列作为自动增量的主键,该列有效。但后来我有两个独特的钥匙。
    5. 这是我的Databasemodel:

      [Table("mandant", Schema = "public")]
      public class MandantEdm
      {
          public MandantEdm()
          {
          }
      
          [Key]
          [Column("mandantid")]
          public int MandantId { get; set; }
      }
      

      这是上下文类:

      class LicenseContext : DbContext
      {
          public LicenseContext()
              : base("MandantContext")
          {
          }
      
          public virtual DbSet<MandantEdm> Mandants { get; set; }
      }
      

1 个答案:

答案 0 :(得分:0)

我也遇到了这个问题。 并解决了它。您应为Order属性添加Column值,并为主键添加DatabaseGenerated属性。

[Table("mandant", Schema = "public")]
public class MandantEdm
{
    public MandantEdm()
    {
    }

    [Key]
    [Column("mandantid", Order = 1)]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int MandantId { get; set; }
}