【问题标题】:EF: Cannot insert value NULL into column 'ID'EF:无法将值 NULL 插入“ID”列
【发布时间】:2023-03-04 10:48:01
【问题描述】:

尝试使用实体框架在我的数据库中插入一行。我在插入时分配了除主键 ID 之外的所有值,并且我希望它由 SQL Server DB 自动递增。

我的表定义/类:

public partial class T_SurfacePick
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int ID { get; set; }

    public int? BoreholeID { get; set; }
    public int? AuthoredNameID { get; set; }
    public int? LoadFormat { get; set; }
    public double? PickDepth { get; set; }
    public int? OwningAuthorID { get; set; }
    public int? QualityID { get; set; }
    public double? CustomData { get; set; }
}

当我调用SaveChanges() 方法时,我得到一个错误

无法将值 NULL 插入“ID”列

如何让该列自动递增?我不想担心跟踪 ID 并自己分配它。

我正在尝试使用代码优先的方法。这是我的插入/更新决策树的一部分示例:

if (MenefeePick == null) // New top
{
   var Pick = new T_SurfacePick { BoreholeID = Wellbore.ID, AuthoredNameID = MenefeeAN.ID, LoadFormat = 1, PickDepth = Menefee, OwningAuthorID = ProgAuthor.ID, QualityID = -1, CustomData = null };
   db.T_SurfacePick.Add(Pick);
}
else // Update top
{
    MenefeePick.PickDepth = Menefee;
}
db.SaveChanges();

我将进一步说明我的模型使用来自软件产品的现有数据库。

【问题讨论】:

  • 你在服务器上设置为IDENTITY了吗?
  • 将该列设为主键并将其设置为 AUTO INCREMENT。
  • 在行中设置标识。像这样(id int 主键身份(1,1))
  • 您能展示一下您的表的架构吗?
  • 请添加更多信息。您使用的是什么 EF 方法(代码优先,数据库优先...)。还举一个您用于在数据库中插入记录的代码示例。

标签: c# sql-server entity-framework


【解决方案1】:

İf 模型第一次尝试块

[Key]
 [DatabaseGenerated(DatabaseGeneratedOption.None)]
 public Int64 PolicyID { get; set; }

【讨论】:

    【解决方案2】:

    ID 定义为int? ID。对于?,变量将接受null

    【讨论】:

    • 这可能不是 op 想要的。他为什么要一个空值作为 id?
    • 不知道为什么,但问题是“无法将值 NULL 插入列 ID”。
    • 请再次阅读问题。错误消息是无法插入值 NULL问题如何让此列自动递增?
    • 代码显示该列是“键”,但也是数据库生成的,所以可能在 ID 列中为零,并让它在插入时更改
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-21
    • 1970-01-01
    相关资源
    最近更新 更多