【发布时间】:2014-12-09 14:33:59
【问题描述】:
我知道以前有人问过这个问题,但是经过长时间的搜索和编码后,我无法找到一种有效且干净的方法。这是我所拥有的:
public class QuestionModel
{
public int QuestionID { get; set; }
public string QuestionText { get; set; }
public IList<QuestionChoiceModel> Choices { get; set; }
}
public class QuestionChoiceModel
{
public int ChoiceID { get; set; }
public string ChoiceText { get; set; }
}
我正在为这个 ASP.Net MVC 应用程序使用 EF 5。通用存储库模式和使用 InRequestScope() 的 Ninject 依赖注入已经到位并且工作顺利。这些模型可以毫无问题地映射到实体/从实体映射。
向数据库添加新问题非常简单。我设置了一些 QuestionChoice 实例的 Question 属性,其余部分由 EF 处理。
问题在于更新。假设我们在数据库中有一个带有 3 个 QuestionChoices 的问题:
ChoiceID QuestionID ChoiceText
-------- ---------- ----------
1 1 blah blah
2 1 blah blah
3 1 blah blah
当问题的编辑页面打开时(GET:/Questions/Edit/1),我在 Razor 中使用 foreach 显示这 3 个选项。我编写了一些 JQuery 代码,如果用户愿意,可以添加或删除输入元素所需的标记。因此,可能会在客户端编辑 ID=1 的 QuestionChoice,可能会删除 ID=2,并可能会添加新的 ID=4。当用户按下保存按钮(POST:/Questions/Edit/1)时,表单数据完美地绑定回 QuestionModel。模型正确映射到 Question 实体。故事就从这里开始!
现在 Question 实体有一个 QuestionChoices 集合,其中一些已经在数据库中,一些应该添加到数据库中,还有一些应该从数据库中删除。
我读过很多帖子,例如: Entity Framework not saving modified children
我可以用那种肮脏的方式处理编辑。还有新记录:
this._context.Entry(choice).State = EntityState.Added;
但我正在寻找一种更优雅的方式。并且还处理应该删除的记录。在这种情况下使用 EF 处理子实体的完整插入/更新/删除是否有一种好方法?老实说,我对 EF 的期望更高。
【问题讨论】:
标签: c# asp.net-mvc entity-framework