存在一对一关系:
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(Card.Id = 444)。
防止这种行为的最佳方法是什么:从OwnerId = 2中删除Card.Id = 444并将CardId更改为所有者1的请求?
答案 0 :(得分:1)
是; 1:1是通过一侧上的唯一FK强制执行的,因此必须首先将Owner.CardId
的{{1}}属性更改为其他值(或删除OwnerId = 2
记录)。
除非关系的双方都是可选的(即Owner
不必具有Owner
,而Card
不必具有Card
),则应使用共享的主键(1 :?关系的PK的可选端也应为被请求方的PK的FK)
答案 1 :(得分:0)
首先将CardId
的{{1}}设置为null(如果可以将其设置为OwnerId
),但是如果其他任何行具有{{1},它将再次为您提供重复密钥}值。因此,您必须为此null
删除行,然后更新所需的行。