ef core - 更新复合主键

ef core - update composite primary key

我有几个表具有复合键 { Id + OrgId }。 Id 由应用程序的用户提供,OrgId 由系统处理。我想为这些表的所有实例设置 OrgId,而不必转到每个 repo 然后在附加之前手动设置 OrgId。

我该怎么做?

在 OrgId 不是主键的一部分的情况下,我覆盖 SaveChanges() 以在调用基本实现之前更新所有具有 OrgId 的跟踪实体。当 OrgId 是主键的一部分时,此方法不起作用,因为我们无法在跟踪实体后更新其主键。

因此,在 SaveChanges() 覆盖内,我将 entry.Entity.OrgIdentry.OriginalValues["OrgId"]entry.CurrentValues["OrgId"] 设置为相同的值。我不再得到例外。此外,在这个阶段我确保将 OrgId 标记为 .ValueGeneratedNever().

不过,我建议您看看@IvanStoev 的解决方案。