2017-06-16 14 views
0

次のように:問題は6

public class Person 
{ 
    public Person() 
    { 
     this.Courses = new HashSet<Course>(); 
    } 

    public int PersonId { get; set; } 
    [Required] 
    public string PersonName { get; set; } 

    public virtual ICollection<Course> Courses { get; set; } 
} 


public class Course 
{ 
    public Course() 
    { 
     this.Students = new HashSet<Person>(); 
    } 

    public int CourseId { get; set; } 
    public string CourseName { get; set; } 

    public virtual ICollection<Person> Students { get; set; } 
} 

私は(予想通り)、データベース内のこのような構造で終わります:
enter image description here
PersonCoursesテーブルに注意してください)

しかし、私の例では、私はまた、コースにインストラクターを追加したいです。以下に示すように、単に皆のようなコースを受講ので、私は上記のクラスを調整することができます。このインストラクターもPersonある 、

public class Person 
{ 
    public Person() 
    { 
     this.Courses = new HashSet<Course>(); 
    } 

    public int PersonId { get; set; } 
    [Required] 
    public string PersonName { get; set; } 

    public virtual ICollection<Course> Courses { get; set; } 
    public virtual ICollection<Course> InstructedCourses { get; set; } 
} 

public class Course 
{ 
    public Course() 
    { 
     this.Students = new HashSet<Person>(); 
    } 

    public int CourseId { get; set; } 
    public string CourseName { get; set; } 

    public virtual ICollection<Person> Students { get; set; } 
    public virtual Person Instructor { get; set; } 
} 

私は何を見て期待していたことは、上記と同じデータベース構造です、人を多くのコースにリンクさせた追加のテーブルが作成されています。

はしかし、どのような私が得たことは、このでした:私は見ることを望ん/期待していた何
enter image description here
PersonCoursesテーブルがなくなっていることに注意してください)

これに類似していた: enter image description here

私は別のInstructor/Personクラスを持っていない理由は、どんなPersonでもコースを作って、tのインストラクターになれると思っているということです帽子コース。

まず、EFでコードファーストで達成することは可能ですか?私はそう仮定している..
第二に - 私は間違っていますか?
3番目 - まだ週末ですか?

は、すべてのヘルプは大歓迎:)

+0

回答:https://stackoverflow.com/questions/19342908/how-to-create-a-many-to-many-mapping-inentity-framework –

答えて

0

これは私がコード最初をお勧めします/好きではない理由の1つです。 EFは2番目のInstructedCoursesコレクションと混同されていて、コースから講師のリファレンスを戻したようですが、学生コレクションを1対多にしたようです。

私は真剣にどちらかを検討します: A)学生主体 または B対インストラクターのエンティティを定義するためにあなたを変えるドメイン)は、あなたが望むのテーブルに適切なEFマッピングで最初のスキーマを行います。

DBAは、スキル全体でcourse_personId/Person_personIdのようなものを見たいとは思っていません。ある日、サポートと最適化が必要になります。

インストラクターと学生は、エンティティまたは識別子ごとにテーブルを持つ基本「Person」クラスを拡張できます。インストラクターへのコースと学生関係のコースは、より明確に定義することができます。同じ "人"がインストラクターと学生の両方として参照できるようにしたい場合、制限があります。