0

我有StudentCourse和他们之间的关系为StudentCourse。这些类中的字段如下:

public class Student
    {
        public int StudentId { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public int CourseId { get; set; }
        [ForeignKey("CourseId")]
        public Course Course { get; set; }
    }


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



public class StudentCourse
    {   
        public int ID { get; set; }
        public virtual Student Student { get; set; }
        public virtual Course Course {get;set;}
    }

当我删除student表中的学生时,我想从关系中删除相应的行StudentClass。我该怎么做?

4

1 回答 1

1

Student我相信您实际上想要和之间的多对多关系Course:一个学生可以参加很多课程,一个课程可以有很多学生。

在这种情况下,您可以简化模型:

public class Student
{
    public int StudentId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public ICollection<Course> Courses { get; set; }
}

public class Course
{
    public int CourseId { get; set; }
    public string CourseName { get; set; }
    public ICollection<Student> Students { get; set; }
}

StudentCourse不需要“加入实体” 。EF 将从此模型创建三个表:一个Students表、一个Courses表和StudentCourses(或CourseStudents)将具有复合主键(StudentId, CourseId)(或类似名称)的表。这两个部分都是各自表的外键。

对于数据库中的两个外键关系,默认开启级联删除。因此,如果一个Student被删除,连接表中的链接记录将被自动删除。当 aCourse被删除时也是如此。

您还可以显式定义连接表和连接表列的详细名称,也可以只使用单个集合,例如只有 in 中的Courses集合Student但没有Studentsin 中的集合Course。为此,您必须使用 Fluent API:

modelBuilder.Entity<Student>()
    .HasMany(s => s.Courses)
    .WithMany() // no parameter if there is no collection in Course
    .Map(m =>
    {
        m.MapLeftKey("StudentId");
        m.MapRightKey("CourseId");
        m.ToTable("StudentCourses");
    });
于 2013-01-01T17:38:57.113 回答