【问题标题】:Primary key already exists when saving new record using EF6使用 EF6 保存新记录时主键已存在
【发布时间】:2019-06-22 06:33:47
【问题描述】:

我已经使用这个逻辑一个月了,最近它停止工作了。

var tool = new Tool() { ToolNumber = toolNumber.Trim(), Description = description.Trim() };
context.AddToTools(tool);
context.SaveChanges();

AddToTools 看起来像这样:

    public void AddToTools(Tool tool)
    {
        base.AddObject("Tools", tool);
    }

我在 context.SaveChanges() 上收到错误;

System.Data.Entity.Core.UpdateException H结果=0x80131501 Message=更新条目时发生错误。有关详细信息,请参阅内部异常。

内在的例外:

{"违反 PRIMARY KEY 约束 'PK_Tool'。无法在对象 'dbo.Tool' 中插入重复键。重复键值为 (0)。\r\n语句已终止。"}

当我检查该值时,tool.ID 值为 0,并且表中已经有一个 ID 为 0,因此异常是正确的。

似乎某种更新、操作系统更新或 SqlServer 更新或某些东西损坏了它。

为什么我对表格的插入不起作用?

【问题讨论】:

  • 您需要在您的表格和 EF 模型映射中将 pk 属性 (tool.id) 设置为 IDENTITY。如果您正在使用迁移,那么仅更改 c# 代码就足够了,因为迁移会更改架构。
  • 请出示模型工具的代码。
  • 主键不再递增,因为内部异常声明重复键为0。您需要将ok设置为自动递增
  • 检查这个:stackoverflow.com/questions/16286309/… 注意:我不能评论 que。
  • @Bosco - 准点!不知何故,该字段的定义已更改,因此 ID 不是身份。感谢您的帮助和洞察力。

标签: c# entity-framework-6


【解决方案1】:

以上@Bosco:

“主键不再递增,因为内部异常声明重复键为0。您需要将ok设置为自动递增”

不知何故,表定义中的 Identity 属性已更改为 no。将其更改为是,一切都很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多