C#如何使用Entity Framework删除两个实体之间的引用?

时间:2017-11-02 18:28:19

标签: c# entity-framework

我有模特:

  • 学生=(...列出课程表);
  • 课程=(...列出StudentList);

我将学生添加到几个不同的课程并使用实体框架,我将所有内容添加到数据库中。

请帮助我使用EF

删除特定课程的学生

2 个答案:

答案 0 :(得分:0)

显示您的模型和代码以获取帮助非常有帮助。我将根据您的伪代码进行搜索:

var course = context.Courses.Include(c => c.Students)
    .SingleOrDefault(c => c.CourseID == selectedCourseId);

if (course != null)
{
    var studentToRemove = course.Students.SingleOrDefault(s => c.StudentID == selectedStudentId);
    if (studentToRemove != null)
    {
        course.Students.Remove(studentToRemove);
        context.SaveChanges();
    }
}

答案 1 :(得分:0)

如果您配置了one-to-many relationshipmany-to-many relationship

,这取决于一点

我认为每个Student可以参加零个或多个Courses,每个Course可以参加零个或多个Students:多对多关系

配置如下:

class Student
{
   public int Id {get; set;}
   // a Student attends zero or more courses:
   public virtual ICollection<Course> Courses {get; set;}
}
class Course
{
   public int Id {get; set;}
   // a Course is attended by zero or more Students:
   public virtual ICollection<Student> Students{get; set;}
}
class MyDbContext : DbConter
{
    public DbSet<Student> Students {get; set;}
    public DbSet<Course> Courses {get; set;}
}

这就是全部。从这个实体框架将知道您想要设计多对多关系。它甚至可以为您创建和填充多对多联结表。

所以现在你已经添加了一些学生和一些课程。 假设您要删除学生。

using (var dbContext = new MyDbContext())
{
    Student studentToRemove = ... 
    // for example:
    Student studentToRemove = dbContext.Students
         .Where(student => student.Name == "John Doe")
         .FirstOrDefault();
    if (studentToRemove != null)
    {
        dbContext.Students.Remove(studentToRemove);
        dbConext.SaveChanges();
    }
}

就是这样。实体框架将从Student表中删除Students,并自动确保无法在任何Courses列表中找到他。你不必做一些内部联接。实体框架知道它是一个多对多的关系,并将为您做正确的内部联接