.net 实体框架核心和一对一关系:重复条目
有一对一的关系:.net 实体框架核心和一对一关系:重复条目,.net,entity-framework,entity-framework-core,ef-core-2.0,ef-core-2.1,.net,Entity Framework,Entity Framework Core,Ef Core 2.0,Ef Core 2.1,有一对一的关系: builder.Entity<Models.Card>() .HasOne<Models.Owner>() .WithOne(c => c.Card) .HasForeignKey<Models.Owner>("OwnerId"); builder.Entity() .HasOne() .带一张(c=>c.Card) .HasForeignKey(“所有者ID”); 此时此刻 OwnerId=1有卡。Id=3
builder.Entity<Models.Card>()
.HasOne<Models.Owner>()
.WithOne(c => c.Card)
.HasForeignKey<Models.Owner>("OwnerId");
builder.Entity()
.HasOne()
.带一张(c=>c.Card)
.HasForeignKey(“所有者ID”);
此时此刻
OwnerId=1有卡。Id=333
和
OwnerId=2有卡。Id=444
如果尝试将OwnerId=1
的CardId更改为CardId=444
我将得到一个类似重复条目的错误。。。对于密钥…
,因为OwnerId=2已经有相同的卡(Card.Id=444)
防止此行为的最佳方法是:从OwnerId=2中删除Card.Id=444,并将所有者1的CardId更改为requested?首先将
OwnerId
的CardId设置为null(如果可以将其设置为null
),但如果任何其他行具有null
值,它将再次为您提供重复的密钥。因此,您必须删除此ownerId
的行,然后更新所需的行 首先将OwnerId
的CardId
设置为null(如果可以将其设置为null
),但如果任何其他行具有null
值,它将再次为您提供重复键。因此,您必须删除此ownerId
的行,然后更新所需的行 是;1:1通过一侧的唯一FK强制执行,因此必须首先将OwnerId=2
的Owner.CardId
属性更改为其他值(或删除该Owner
记录)
除非关系的双方都是可选的(即所有者
不必有卡
,卡
不必有所有者
),否则应使用共享主键(1:?关系主键的可选方也应是要求方主键的FK)是;1:1通过一侧的唯一FK强制执行,因此必须首先将OwnerId=2
的Owner.CardId
属性更改为其他值(或删除该Owner
记录)
除非关系的双方都是可选的(即所有者
不必有卡
,卡
不必有所有者
),否则应使用共享主键(1:?关系的PK的可选方也应是要求方PK的FK)