我有一个答案表,其中包含pk_answerid,answertext,fk_questionid,selectedoptions存储为1,3,2(逗号分隔)
如果填充了answertext,则selectedoptions为null,如果填充了selectedoptions,则answertext为null。
ChosenOption表的结构为pk_chosenoptionid,fk_questionid 在EntityFramework 4中, 我有这些方面的东西
void SaveAnswers(ICollection<Answer> answers)
{
context.Answers.Add(answers);
context.SaveChanges();
}
这很好用....但是当我在用户界面中我回到页面,这是一个Q&amp; A在不同页面上的向导,我取消选择之前选择的所有答案,然后点击保存,不删除任何答案。我也试过DeleteObject,它不会删除Answers和selectedoptions,即使我在Answer表选择表上有级联删除。 同样在编辑场景中,例如如果用户选择了选项1,2,然后将其保存,然后返回并选择3,2如何在EF中编写代码来执行此类复杂的操作。我没有遇到任何解释这种情况的教程。我所看到的大多数是简单的添加,删除和applypropertychanges。我有一个MVC应用程序,它启用了延迟加载。 请使用示例或任何指向现有博客的指针来帮助和建议某种代码。
答案 0 :(得分:2)
EF不小心 - 我一次又一次地发布这个我很遗憾,但我真的不想每次解释它:Update relationships when saving changes of EF4 POCO objects
检查说明。你的问题很相似。您持久化实体图(相关实体集),现在您想要更改图。您的新图表是从Web请求中提取的,这意味着它已分离,EF不知道发生了什么变化。你必须手动完成 - 我刚才讨论了在another question中手动执行它的意思=它通常太复杂了。
最简单的方法是你当前的方法 - 删除所有内容并重新添加它,但它真的很难看。另一种方法是从数据库加载图形并手动合并从请求中获得的所有更改=比较这两个图形并更新加载的(附加的)。请注意,您必须手动调用DeleteObject
以查找要从数据库中删除的任何内容。然后拨打SaveChanges
。
顺便说一下。如果您正在做向导,为什么不在会话中存储当前状态并在用户完成向导后保存所有内容?你会避免所有这些并发症。