Ядро Entity Framework и отношение один-к-одному: повторяющаяся запись - PullRequest
0 голосов
/ 09 сентября 2018

Есть отношения один-к-одному:

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

Если попытаться изменить CardId для OwnerId = 1 на CardId = 444, я получу сообщение об ошибке типа Duplicate entry ... for key ..., потому что OwnerId = 2 уже имеет ту же карту (Card.Id = 444).

Каков наилучший способ предотвратить такое поведение: удалить Card.Id = 444 из OwnerId = 2 и изменить CardId на запрашиваемый для Владельца 1?

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

да; 1: 1 применяется с помощью уникального FK на одной стороне, поэтому свойство Owner.CardId для OwnerId = 2 необходимо сначала изменить на другое значение (или эту запись Owner удалить).

Если обе стороны отношения не являются необязательными (то есть Owner не обязательно должен иметь Card, а Card не должен иметь Owner), общий первичный ключ должен быть used (необязательная сторона PK отношения 1:? также должна быть FK относительно PK запрашиваемой стороны)

0 голосов
/ 09 сентября 2018

Сначала установите CardId для OwnerId на ноль (если это можно сделать как null), но снова это даст вам дубликат ключа, если любая другая строка имеет значение null. Таким образом, вы должны удалить строку для этого ownerId, а затем обновить нужную строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...