Как избежать пометки как неизмененного, а затем как измененного из-за уникального ограничения? - PullRequest
0 голосов
/ 21 января 2020

У меня есть таблица с уникальным ограничением для двух полей (IDParent, positionInParent).

Parent
{
    IDParent;
}

Child
{
    IDChild;
    IDParent;
    PositionInParent;
}

Я могу иметь только ребенка в позиции, и я хочу, чтобы, когда я удаляю ребенка потомки с положением +1 изменяются на положение -1, чтобы не было пробелов.

Проблема заключается в том, что когда я сохраняю изменения в dataContext, потому что EF не обеспечивает порядок операций , поэтому я получаю исключение из-за уникального ограничения, похоже, что обновление затронутых потомков выполняется перед обновлением удаленного потомка.

Итак, я делаю это, что это работает, но мне интересно, есть ли Это лучший способ решения этой проблемы:

  • Измените состояние затронутых детей на неизменное.
  • Сохраните изменения, чтобы удаленный дочерний элемент был отмечен как удаленный.
  • Измените состояние затронутых детей на измененные.
  • Сохраните изменения еще раз.

Но это дает мне дополнительное сохранение изменений, а также использование двух циклов для изменения состояния затронутые дети.

Это уникальный способ или есть лучший способ сделать это?

Я использую EF Core 3.0.

Спасибо.

1 Ответ

1 голос
/ 21 января 2020

Я думаю, что этого можно достичь на уровне БД с помощью триггера AFTER DELETE.

С точки зрения кода - вы, вероятно, можете удалить и сохранить, а затем обновить и сохранить. Чтобы избежать побочных эффектов, делайте все это внутри транзакции

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