我是MVC 3和实体框架的新手,所以我想知道什么是最好的方法。
基本上,我有3个实体:课程,模块和章节。每个都是下一个具有一对多关系的父母(一个课程有很多模块,一个模块有很多章节)。我有一个用于模块和章节的SortOrder列,可以按顺序排序。
我的想法是在更新父级时为子实体使用部分视图。
我有3个观点:
我的计划听起来是否正确可行?我打算使用隐藏字段来存储ID。我还希望保存以异步方式发生。
任何建议或信息都将受到高度赞赏。谢谢!
答案 0 :(得分:1)
我认为这是你的事,但不确定。为了处理子/孙实体的持久性,您可以通过多种方式执行此操作。您可以单独对每个实体执行crud操作。因此,这将涉及例如通过引用课程来保存模块,可能是courseId。
或者您可以看一下只保存聚合根,在这种情况下看起来就像是您的课程实体。这将涉及加载课程,在课程中填充模块,并为每个模块填充章节。然后当你`db.Courses.Add(newCourse); db.SaveChanges();所有实体都将被保留。您必须确保正确设置了外键和模型引用。
例如,要保存子实体:
public ActionResult DoSomething(int courseId, Module newModule)
{
var course = someService.LoadCourse(courseId);
course.Modules.Add(newModule);
using (var db = new MyDbContext())
{
db.Courses.Add(course);
db.SaveChanges();
}
return RedirectToAction("Success");
}
或者您可以单独保存:
public ActionResult DoSomething(Module newModule)
{
using (var db = new MyDbContext())
{
//You will need to make sure newModule.CourseId is set correctly
db.Modules.Add(newModule);
db.SaveChanges();
}
return RedirectToAction("Success");
}
根据您的观点,您将能够判断哪种方式最佳。关于异步保存,您可以使用jquery将模型作为json发布来调用这些端点。在旁注中,要注意的一件事是为json请求example创建自定义Anti Forgery Token验证器。