首页 > 解决方案 > ef core - 更新复合主键

问题描述

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

我怎样才能做到这一点?

在 OrgId 不是主键的一部分的情况下,我重写 SaveChanges() 以在调用基本实现之前更新所有具有 OrgId 的跟踪实体。当 OrgId 是主键的一部分时,这种方法不起作用,因为一旦实体被跟踪,我们就无法更新它的主键。

标签: entity-framework-coremulti-tenant

解决方案


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

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


推荐阅读