【问题标题】:Entity Framework Core generating -ve integer values for Primary Key column on a table row addEntity Framework Core 为表行添加的主键列生成 -ve 整数值
【发布时间】:2020-06-09 21:56:37
【问题描述】:

我正在使用 EF Core v2.2 向表中插入和更新行。

当我这样做时,我正在循环基于列表并尝试插入表中。对于第一行插入代码按预期工作。

但是,从列表中的第二项开始,该行不会插入到表中。

我调试的时候发现在_rmsContext.save()第二次插入后,表的主键值生成为-9223372036854774802

这是我的代码

foreach (string account in accntList)
{
     var crossBowAccounts = _cbContext.SomeTableRepository
                                      .FindBy(ca => ca.AccountId == account && 
                                                    ca.ClientId == model.ClientId)
                                      .FirstOrDefault();

     AccountHistory accountHistory = new AccountHistory()
                            {
                                AccountId = account,
                                ClientId = model.ClientId,
                                UserId = userId,
                                ActionName = crossBowAccounts == null ? "Add" : "Edit"
                            };

     _rmsContext.AccountHistoryRepository.Add(accountHistory);
     _rmsContext.Save();

     // Some more insert/update code for a table in a different context .
    _rmsContext.Save();
}

这里model 被作为输入传递给方法。

这是我在调试过程中观察到的:

这是我的表架构

【问题讨论】:

  • AccountHistoryId 是配置了身份的主键列吗?
  • @ChetanRanpariya 是的,我已经用表格模式的屏幕截图更新了我的帖子。
  • AccountHistoryId为负值时,代码会报错吗? AccountHistoryId_rmsContext.Save();执行后是否有有效值?

标签: c# .net entity-framework entity-framework-core asp.net-core-webapi


【解决方案1】:

您似乎在这里遇到了这个问题:https://github.com/dotnet/efcore/issues/6147

EF Core 生成临时 ID,然后在调用 SaveChanges 时将其替换为真实 ID

这不完全是一个错误,它在 3.1 中再次更改。

因此,在插入项目之前,负数和/或随机数是有意义的。你需要看看为什么它没有被插入(否定的id不是原因)。

【讨论】:

  • 我可能没有正确传达,但是-ve值是在_context.save()执行后产生的。即循环中的第二个项目。
  • 我知道了,但我很确定它没有保存。你可以分享存储库代码吗?也许我们可以弄清楚为什么新对象没有附加到上下文或者为什么没有保存。
【解决方案2】:

不是bug,id是在调用SaveChanges方法之前随机生成的。如果您在 SaveChanges 之后进行调试,则 Id 将是正确的。

【讨论】:

  • 我之前可能没有正确传达,但是-ve值是在_context.save()执行后产生的。我分享的屏幕截图是在 savechanges 执行之后。
  • @Shekar.gvr 嗯,你检查映射了吗?
猜你喜欢
  • 2017-05-06
  • 2020-05-27
  • 1970-01-01
  • 2018-10-19
  • 1970-01-01
  • 2022-09-27
  • 2018-06-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多