Почему основной текст данных EF обновляет коллекции объектов внешнего ключа? - PullRequest
0 голосов
/ 10 декабря 2018

Следующее корректно обновляет объект «обзор», но также обновляет все другие объекты обзора, которые имели такое же исходное значение «статус».

review=_context.Review.Where(q=>q.id==1).Include(q=>q.Status).SingleOrDefaultAsync();
review.Status.Status1= "approved";

, поэтому обзор с id = 1 будет корректно обновляться из «»pending ", но это также делает обзор с id = 2, если он также имел" pending ".

спасибо

1 Ответ

0 голосов
/ 10 декабря 2018

Вы обновляете свойство Status1 записи статуса, а не присваиваете другой статус для обзора.

Например, допустим, у вас есть 3 статуса: «Ожидание», «Утверждено» и «Отклонено»,Это будет 3 записи статуса.Отзыв имеет идентификатор статуса, который указывает на запись статуса.Ваша сущность проверки EF также имеет ссылку на статус.

С учетом следующих записей:

StatusId: 1, Status1: «Pending»

StatusId: 2, Status1: «Approved"

StatusId: 3, Status1:" Rejected "

У вас может быть запись обзора с StatusID 1. (" Ожидание ") Если вы идете по адресу review.Status.Status1 =" Approvedmsgstr "вы говорите EF обновить текстовое поле status1 записи # 1 на" Утверждено ".В каждом обзоре, связанном с StatusID # 1, будет указано «Одобрено».

То, что вы действительно хотите сделать, - это указать на статус ID # 2.

Таким образом, на базовом уровне он должен выглядетьчто-то вроде:

review.Status = context.Statuses.Single(x => x.Status1 == "Approved");

Это говорит EF, чтобы связать эту проверку со статусом соответствия Утверждено.За кулисами EF обновит StatusID вашей записи обзора на «2».Теперь есть более эффективные способы присвоения подобного статуса, но это должно помочь вам понять проблему с ссылками, с которой вы столкнулись в настоящее время.

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