2017-06-16 65 views
0

如果我有一个Course类,有学生的集合(ICollection<Person>)如下:问题与的EntityFramework导航属性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?我假设如此..
其次 - 我做错了什么?
第三 - 现在是周末吗?

所有帮助表示赞赏:)

+0

可能的答案:https://stackoverflow.com/questions/19342908/how-to-create-a-many-to-many-mapping-in-entity-framework。 –

回答

0

这是一个原因,我不喜欢/推荐代码优先。看起来EF似乎与第二个InstructsCourses集合相混淆,相反,只是在课程中设置了指导员参考,尽管它似乎刚刚使学生集合也成为了一对多。

我会认真考虑之一: A)首先改变你的域定义讲师实体与学生实体 或 B)不要架构与适当的EF映射到你想要的表。

我不认为任何DBA都希望在整个模式中看到像course_personId/Person_personId这样的事情,他们总有一天需要支持和优化。

教师和学生可以使用每个实体的表或每个标识符来扩展一个基本“Person”类。然后可以更清楚地定义教师和学生关系课程。如果你想让同一个“人”既可以作为教师又可以作为学生参考,那么限制就是如此。