EntityFramework 6中的导航属性问题

时间:2017-06-16 09:09:17

标签: c# entity-framework

如果我有一个Course课程,其中有一组学生(ICollection<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 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可以创建一门课程,从而成为该课程的讲师。

首先 - 这可以通过EF中的代码优先实现吗?我这么假装。
其次 - 我做错了什么?
第三 - 这是周末了吗?

所有帮助表示赞赏:)

1 个答案:

答案 0 :(得分:0)

这是我不喜欢/推荐代码优先的一个原因。看起来EF与第二个InstructedCourses集合混淆了,而只是从课程中设置了教师参考,虽然它似乎刚刚使学生集合成为1对多。

我会认真考虑: A)更改您的域以定义教师实体与学生实体 要么 B)首先使用适当的EF映射到所需的表格来构建模式。

我认为任何DBA都不希望在整个架构中看到类似course_personId / Person_personId的内容,而这些内容有一天需要支持和优化。

教师和学生可以扩展基地&#34; Person&#34;具有每个实体的表或标识符的类。然后可以更清楚地定义教师和课程与学生关系的课程。如果你想要同一个人,那么限制就是&#34;能够被引用为教师和学生。