«Обнаружен цикл в наборе изменений» При попытке добавить циклически связанный список в базу данных - PullRequest
2 голосов
/ 04 апреля 2011

Я использую циклически связанный список «в базе данных» (cll).Я вставляю записи базы данных, формирующие эти cll, используя Linq to Sql.

Они имеют общую форму:

id uuid | nextId uuid | current bit

Если я пытаюсь сделать SubmitChanges с несколькими объектами, образующими полный cll, я получаю ошибку "В наборе обнаружен циклизменения».

Я могу обойти это, сделав связанный список «круговым» в отдельном SubmitChanges, но у этого есть две отрицательные стороны: я теряю свою способность делать это в одной транзакции.В течение небольшого периода времени данные в моей базе данных неверны.

Есть ли способ исправить это поведение?

1 Ответ

2 голосов
/ 04 апреля 2011

В базе данных должны соблюдаться ограничения, и я предполагаю, что у вас есть ограничение внешнего ключа между nextId и Id. Если эта цепочка отношений приведет к началу (как вы уже нашли), база данных не допустит этого.

Я подозреваю, что ваш выбор:

  1. Снять ограничение внешнего ключа.
  2. Хранить в БД в виде связанного списка и присоединять только голову с хвостом в вашем коде.

Даже ваш второй вариант не будет работать, так как БД не позволит вам добавить эту последнюю ссылку.

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