EF4 круговая ссылка проблема при удалении - PullRequest
1 голос
/ 21 января 2011

Привет! Я использую EF 4 для самостоятельного отслеживания. У меня есть три таблицы (анкета, раздел и страница) следующим образом:

Questionnaire
Id
Title
WhenClosedShowPageId

Section
Id
QuestionnaireId

Page
Id
SectionId

Так, чтобы в модели EF в Анкете были разделы, а в разделе - страницы. WhenClosedShowPageId - это пустое int, которое ссылается на страницу, отображаемую при закрытии анкеты. Все ссылки имеют ассоциации для сохранения ссылочной целостности.

Проблема возникает, когда я отмечаю все объекты как удаленные и пытаюсь сохранить. Если WhenClosedShowPageId был нулевым, когда я получил данные, тогда удаление работает нормально. Если для параметра WhenClosedShowPageId установлено значение, EF не может определить порядок удаления. Это понятно. Однако, если я устанавливаю WhenClosedShowPageId в null, помечаю сущности как удаленные и сохраняю, происходит то же самое. Я бы ожидал, что EF сначала сгенерирует оператор обновления, чтобы установить для параметра WhenClosedShowPageId значение null в базе данных, а затем удалить объекты.

Единственный способ обойти эту проблему - это сделать два независимых сохранения: первый для установки WhenClosedShowPageId на ноль, а второй для удаления сущностей. Это приложение с большими слоями, и я не хочу создавать специальный кейс только для этого.

Есть ли способ обойти это?

Даррен

1 Ответ

0 голосов
/ 27 апреля 2011

Entity Framework отменит ожидающие изменения, если объект был помечен для удаления. В конце концов, если вы избавляетесь от этого, какой смысл сначала обновлять данные? К сожалению, это может привести к самому состоянию, которое вы видите.

Лучшее решение вашей проблемы - сделать так, чтобы оба конца ассоциации через WhenClosedShowPageId не каскадно удалялись (End1 OnDelete и End2 OnDelete установлены на None). Поскольку эта страница является частью раздела, который является частью Анкеты, она в конечном итоге будет удалена, поэтому вам не нужно об этом беспокоиться.

...