Удаление объекта из свойства навигации не помечает его как удаленное. Это только удалит отношение - это означает, что для FK в UserMessage
будет установлено значение NULL, а если оно не обнуляется, вы получите исключение. Вы должны сделать что-то вроде:
foreach (var reply in replies)
{
if (user.ReceivedMessages.Contains(reply))
{
user.ReceivedMessages.Remove(reply);
reply.Receiver = null;
}
if (user.SentMessages.Contains(reply))
{
user.SentMessages.Remove(reply);
reply.Sender = null;
}
_repository.Delete(reply);
}
Edit:
Указанный код удаляет UserMessage
- не Message
. Когда я думаю о вашей модели, ваша новая проблема очевидна. Ваше первое исключение было вызвано ограничениями множественности для объекта UserMessage
- Receiver
является обязательным, поэтому вы не можете удалить отношение к получателю, не удалив целое UserMessage
, но после удаления UserMessage
(и другого получателя сообщения нет ) он также удалит его из отправителя.
Ваша модель неверна. Даже если вы сделаете Receiver
необязательным, это приведет к UserMessage
экземплярам без получателя, и если вы не сохраните список получателей где-то еще, вы потеряете информацию об одном из исходных получателей (когда отправитель снова откроет сообщение из своего почтового ящика, он, скорее всего, не будет см. приемник).