【发布时间】:2018-08-11 20:37:37
【问题描述】:
我是一个初学者,正在尝试使用对用户的发布请求来创建多对多关系
/ApplyCourse/?studentId=1003&courseId=3
但我收到以下错误:
SqlException:违反主键约束“PK_StudentCourses”。无法在对象“dbo.StudentCourses”中插入重复键。重复键值为 (1003, 3)。
我做错了什么?创建多对多关系的好方法是什么?
[Route("CourseApply")]
[HttpPost("{studentId}/{courseId}")]
public async Task<IActionResult> CourseApply(int studentId, int courseId)
{
Student studentEntity = _context.Students.Find(studentId);
Course courseEntity = _context.Courses.Find(courseId);
StudentCourse enrollment = new StudentCourse();
enrollment.Course = courseEntity;
enrollment.Student = studentEntity;
_context.StudentCourses.Add(enrollment);
await _context.SaveChangesAsync();
return CreatedAtAction("GetStudent", new { id = studentEntity.Id }, studentEntity);
}
public class StudentCourse
{
public int StudentId { get; set; }
public Student Student { get; set; }
public int CourseId { get; set; }
public Course Course { get; set; }
}
public class Course
{
public int Id { get; set; }
public string Name { get; set; }
public IList<StudentCourse> Students { get; set; }
}
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
public IList<StudentCourse> Courses { get; set; }
}
【问题讨论】:
-
StudentCourse 在模型中没有 ID;但我假设数据库中有一些主键。你能详细说明它在
DbContext中是如何定义的吗? -
我在 OnModelCreating() 中使用复合键。 modelBuilder.Entity
().HasKey(sc => new { sc.StudentId, sc.CourseId });