0

我是 MVC 3 和实体框架的新手,所以我想知道什么是最好的方法。

基本上,我有 3 个实体:课程、模块和章节。每个都是具有一对多关系的下一个的父级(一个课程有许多模块,一个模块有许多章节)。我有一列 SortOrder 用于 Modules 和 Chapters,让它们按顺序排列。

我的想法是在更新父实体时为子实体使用部分视图。

我有3个观点:

  1. 创建/更新课程:课程的所有基本信息
  2. 课程模块(基本上是更新课程的不同视图),可以选择添加多个部分视图,每个视图都创建一个模块
  3. 课程时间表(对于更新课程仍然是不同的视图)列出了所有模块(在单独的 div 上),并且可以选择添加多个部分视图,每个视图都创建一个章节

我的计划听起来正确和合理吗?我计划使用隐藏字段来存储 ID。我还希望保存异步发生。

任何建议或信息将不胜感激。谢谢!

4

1 回答 1

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 请求创建一个自定义的 Anti Forgery Token 验证器,例如.

于 2013-03-12T06:19:32.770 回答