C'è una relazione One-to-One:
builder.Entity<Models.Card>()
.HasOne<Models.Owner>()
.WithOne(c => c.Card)
.HasForeignKey<Models.Owner>("OwnerId");
In questo momento OwnerId = 1 has Card.Id = 333
e OwnerId = 2 has Card.Id = 444
Se provi a cambiare CardId per OwnerId = 1
a CardId = 444
ricevo un errore come Duplicate entry ... for key ...
, perché OwnerId = 2 ha già la stessa scheda (Card.Id = 444).
Qual è il modo migliore per prevenire questo comportamento: rimuovere Card.Id = 444 da OwnerId = 2 e modificare CardId su richiesto per il proprietario 1?
sì; 1: 1 viene applicato tramite FK univoco su un lato, pertanto la proprietà Owner.CardId
per OwnerId = 2
deve essere prima modificata in un valore diverso (o il record Owner
eliminato).
A meno che entrambi i lati della relazione non siano facoltativi (ovvero un Owner
non debba possedere una Card
e una Card
non debba possedere un Owner
), deve essere utilizzata una chiave primaria condivisa (il lato opzionale della relazione 1 :? PK dovrebbe anche essere un FK per il PK del lato interrogato)
Prima imposta il CardId
per OwnerId
su null (se questo può essere reso null
), ma di nuovo ti darà la chiave duplicata se qualsiasi altra riga ha un valore null
. Quindi devi cancellare la riga per questo ownerId
e quindi aggiornare la riga richiesta.