0

私は MVC 3 と Entity Framework を初めて使用するので、最善のアプローチを知りたいです。

基本的に、コース、モジュール、章の 3 つのエンティティがあります。それぞれは、1 対多の関係を持つ次の親です (コースには多くのモジュールがあり、モジュールには多くのチャプターがあります)。モジュールとチャプターを順番に並べるための列SortOrderがあります。

私の考えは、親を更新するときに子エンティティに部分ビューを使用することでした。

私は3つの見解を念頭に置いています:

  1. コースの作成/更新: コースのすべての基本的な詳細
  2. 複数の部分ビューを追加するオプションがあり、それぞれがモジュールを作成するコース モジュール (基本的には更新コースの別のビュー)
  3. すべてのモジュールを (個別の div に) リストし、複数の部分ビューを追加するオプションがあり、それぞれがチャプターを作成するコース タイムライン (更新コースの別のビュー)

私の計画は正しく、もっともらしく聞こえますか? 隠しフィールドを使用して ID を保存する予定です。また、保存を非同期で行いたいと考えています。

アドバイスや情報をいただければ幸いです。ありがとう!

4

1 に答える 1

1

これがあなたの後だと思いますが、よくわかりません。子/孫エンティティの永続性を処理するには、いくつかの方法でこれを行うことができます。各エンティティに対して crud 操作を個別に実行できます。そのため、たとえば、コースへの参照、おそらく courseId を使用してモジュールを単独で保存する必要があります。

または、集計ルートのみを保存することもできます。この場合、これは Course エンティティのように見えます。これには、コースの読み込み、コース上のモジュールの入力、および各モジュールの章の入力が含まれます。次に、`db.Courses.Add(newCourse); デシベル。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");
}

あなたの見解に応じて、どの方法が最善かを判断することができます。非同期保存に関しては、モデルをjsonとして投稿するjqueryでこれらのエンドポイントを呼び出すことができます。余談ですが、json リクエスト用のカスタム Anti Forgery Token バリデーターを作成することを検討してください。

于 2013-03-12T06:19:32.770 に答える