我有模特:
我将学生添加到几个不同的课程并使用实体框架,我将所有内容添加到数据库中。
请帮助我使用EF
删除特定课程的学生答案 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 relationship或many-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
列表中找到他。你不必做一些内部联接。实体框架知道它是一个多对多的关系,并将为您做正确的内部联接