Entity Framework 核心和一对一关系:重复条目

Entity Framework Core and One-to-One Relation: Duplicate entry

存在一对一关系:

builder.Entity<Models.Card>()
    .HasOne<Models.Owner>()
    .WithOne(c => c.Card)
    .HasForeignKey<Models.Owner>("OwnerId");

此刻 OwnerId = 1 has Card.Id = 333OwnerId = 2 has Card.Id = 444

如果尝试将 OwnerId = 1 的 CardId 更改为 CardId = 444,我会收到类似 Duplicate entry ... for key ... 的错误,因为 OwnerId = 2 已经有相同的卡(Card.Id = 444).

防止此行为的最佳方法是什么:从 OwnerId = 2 中删除 Card.Id = 444 并将 CardId 更改为所有者 1 请求的?

首先将 OwnerIdCardId 设置为空(如果这可以设为 null),但如果任何其他行具有 null 值。因此,您必须删除此 ownerId 的行,然后更新所需的行。

是的; 1:1 是通过一侧的唯一 FK 强制执行的,因此必须首先将 OwnerId = 2Owner.CardId 属性 更改为不同的值(或者删除 Owner 记录).

除非关系的双方都是可选的(即 Owner 不必有 Card 并且 Card 不必有 Owner),应使用共享主键(1:? 关系的 PK 的可选端也应该是所需端 PK 的 FK)