2017-02-06 11 views
0

私は.NET、MVC、EFなどに移動するデータベースの人だと言います。だから私はジョインや外部キーなどについて十分に理解していますが、EF側とは苦労しています。Entity Framework - 「リンク」テーブルをモデル化する必要があるのはいつですか?

私たちは次のようでしたチュートリアルを働いた:

  • を、コーステーブル(CourseIDと被写体詳細)、および登録テーブル(EnrollmentID、学生を学生テーブル(StudentIDと個人情報)の作成コースIDとそのクラスのその学生に与えられた等級)。その中
  • など、すべての入学者数をリストし、学生の名前を編集するクラスの生徒を登録し、それらのグレードを与え許可する学生や入学エンティティのためのモデル、コントローラとビューを作成

チュートリアルEnrollmentsテーブルは、私が知っているように、 "ブリッジ"テーブルです。これは、学生がクラスに多対多の関係があるためです。

このような多対多のシナリオの場合、この「中間」モデル/ビュー/コントローラだけが必要ですか?

私がプログラムしたい、実際の構造は次のとおりです。

  • 条(情報でarticleID、タイトル、著者、要約、コンテンツ...)(区分、タイトル、説明
  • カテゴリーのメンバーであり、 ...)

次に、選択されたカテゴリをクリックすると、記事のタイトル/作成者/要約のテーブルがページに表示されるカテゴリのドロップダウンリスト(またはUI要素)が表示されます。そのカテゴリに入る

アーティクルが複数のカテゴリー(「Catnipの効果的な使用」は「猫と一緒に遊ぶ」と「ライフハック」の両方にある可能性があります)にある可能性があるのは、「ブリッジ」テーブルが必要な場所ですか?

簡単な言葉で説明することができます。私は、チュートリアルのデータの「多対多」性格に甘んじているのか、「ブリッジ」テーブル構造がEFにとってより基本的であるかPK/FKの関係。

+1

リンクテーブルは、「多対多」関係にのみ必要です。 'one-to-many'はDB内の' many'テーブルのFKで通常通りモデル化されます。 –

答えて

3

あなたが読んでいるチュートリアルは、EFの基本概念を紹介しようとしていると思います。あなたは、3つの異なるエンティティとして、これらの3つのテーブルを表すことができ、EFの世界で

Student 
Course 
Enrollment (Student_Id, Course_Id) 

:あなたは多対多の関係を持っている場合は、データベース側では、常に3つのテーブルを持っています。あなたが学生とコースとの関係を表すのがより「自然な」方法を持っているしたい場合は、EFは、2つのリストとして多対多を宣言することができます:

public class Student { 
    ... properties 
    virtual List<Course> Courses; 
} 

public class Course { 
... properties 
virtual List<Student> Students; 
} 

しかし、あなたがEFを指示する必要がありますどのように両側でこの参照を扱う必要がありますか。そのためには、流暢なAPIを使用できます。流暢なライブラリのAPIを使用してNの関係:Mを説明する

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 

    modelBuilder.Entity<Student>() 
       .HasMany<Course>(s => s.Courses) 
       .WithMany(c => c.Students) 
       .Map(cs => 
         { 
          cs.MapLeftKey("StudentRefId"); 
          cs.MapRightKey("CourseRefId"); 
          cs.ToTable("StudentCourse"); 
         }); 

} 

Check this article:この流暢APIを使用すると、両方のテーブル/エンティティを参照するテーブル名を定義することができます。本当にシンプルですが、その中にこの追加の要素は必要ありません。

UIに関しては、学生が受けたいコースのリスト、またはコースに必要な学生のリストを選択するだけです。両方の機能(生徒を定義するコースとコースを取っている生徒)が同じm:nの関係を指しているので、どのようにして情報をユーザに提示するかはあなた次第です。

私は簡単な方法で学生とリストを表示し、彼が適用できるコースのリストを表示することができると思う。

作成したいプロジェクトは、同じアイデアを使用します。基本的には、EFでは常に「テーブル」という言葉を考える必要があります。 EFでは、テーブルをエンティティに抽象化できますが、いくつかのルールに従う必要があります。要約すると:あなたは正しいです。 「ブリッジ」テーブルでは、多対多の関係を格納する必要があります。

+0

また、OPはCODE FIRSTまたはDBを最初に使用する予定ですか?これはCODE FIRSTアプローチにも当てはまりますが... –

関連する問題