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 = 333
和
OwnerId = 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 请求的?
首先将 OwnerId
的 CardId
设置为空(如果这可以设为 null
),但如果任何其他行具有 null
值。因此,您必须删除此 ownerId
的行,然后更新所需的行。
是的; 1:1 是通过一侧的唯一 FK 强制执行的,因此必须首先将 OwnerId = 2
的 Owner.CardId
属性 更改为不同的值(或者删除 Owner
记录).
除非关系的双方都是可选的(即 Owner
不必有 Card
并且 Card
不必有 Owner
),应使用共享主键(1:? 关系的 PK 的可选端也应该是所需端 PK 的 FK)
存在一对一关系:
builder.Entity<Models.Card>()
.HasOne<Models.Owner>()
.WithOne(c => c.Card)
.HasForeignKey<Models.Owner>("OwnerId");
此刻
OwnerId = 1 has Card.Id = 333
和
OwnerId = 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 请求的?
首先将 OwnerId
的 CardId
设置为空(如果这可以设为 null
),但如果任何其他行具有 null
值。因此,您必须删除此 ownerId
的行,然后更新所需的行。
是的; 1:1 是通过一侧的唯一 FK 强制执行的,因此必须首先将 OwnerId = 2
的 Owner.CardId
属性 更改为不同的值(或者删除 Owner
记录).
除非关系的双方都是可选的(即 Owner
不必有 Card
并且 Card
不必有 Owner
),应使用共享主键(1:? 关系的 PK 的可选端也应该是所需端 PK 的 FK)