Удаление сущностей в EF4 ... разные сценарии работы - PullRequest
0 голосов
/ 04 июня 2011

У меня есть таблица ответов, в которой pk_answerid, answertext, fk_questionid, selectedoptions хранятся как 1,3,2 (через запятую)

answertext, если заполнено, затем selectedoptions равно нулю, а если selectedoptions, если заполнено, то answertext равно нулю,

Таблица ChosenOption имеет структуру pk_chosenoptionid, fk_questionid В EntityFramework 4 у меня есть что-то вроде этого

void SaveAnswers(ICollection<Answer> answers)
{
        context.Answers.Add(answers);
        context.SaveChanges();
}

Это работает нормально .... но когда в пользовательском интерфейсе я возвращаюсь к странице, котораяЭто мастер с вопросами и ответами на разных страницах, и я отменяю выбор всех ранее выбранных ответов, и нажимаю сохранить, ответы не удаляются.Я также попробовал DeleteObject, который не удаляет ответы и выбранные варианты, даже если у меня есть каскадное удаление в таблице ответов в таблицу параметров Chosen.Также в сценариях редактирования, если, например, если пользователь выбрал опцию 1,2, а затем сохраняет ее, а затем возвращается и выбирает 3,2, как вы пишете код в EF, чтобы делать такие сложные вещи.Я не встречал никаких обучающих программ, которые объясняют такие сценарии.Большая часть того, что я видел, - это просто добавлять, удалять и применять свойства.У меня есть приложение MVC, в котором включена отложенная загрузка.Просьба помочь и предложить какой-нибудь код, используя пример или любые ссылки на существующие блоги, где это объясняется.

1 Ответ

2 голосов
/ 05 июня 2011

EF не заботится - мне стыдно публиковать это снова и снова, но я действительно не люблю объяснять это каждый раз: Обновлять отношения при сохранении изменений объектов POCO EF4

Проверьте это объяснение.Ваша проблема похожа.Вы сохранили граф сущностей (набор связанных сущностей) и теперь хотите изменить граф.Ваш новый график извлекается из веб-запроса, что означает, что он отключен, и EF не знает, что изменилось.Вы должны сделать это вручную - я только что обсудил, что значит делать это вручную в другой вопрос = обычно это слишком сложно.

Самый простой способ - ваш текущий подход - удалить все идобавьте это снова, но это действительно уродливо.Другой подход - загрузить график из базы данных и вручную объединить все изменения, которые вы получаете из запроса = сравнить эти два графика и обновить загруженный (прикрепленный).Имейте в виду, что вы должны вручную вызвать DeleteObject для всего, что вы хотите удалить из базы данных.Тогда просто позвоните SaveChanges.

Кстати.если вы делаете мастер, почему бы вам не сохранить текущее состояние в сеансе и сохранить все, как только пользователь завершит работу с мастером?Вы избежите всех этих осложнений.

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