我需要编写将在我的EF数据库中执行插入和删除操作的方法。
当我尝试添加新对象时,我收到以下erorr消息:
SqlException:INSERT语句与FOREIGN KEY约束“ FK_dbo.StudentCourses_dbo.Courses_CourseID”发生冲突。在数据库“ Demo.EmployeeDBcontext”的表“ dbo.Courses”的列“ CourseID”中发生了冲突。
我的课程:
class Student
{
public int StudentId { get; set; }
public string StudentName { get; set; }
publicIList<StudentCourse>StudentCourses { get; set; }
}
class Course
{
public int CourseID { get; set; }
public string CourseName { get; set; }
public IList<StudentCourse>StudentCourses { get; set; }
}
//Many to many entity
class StudentCourse
{
//Navigation properties
public Course Course { get; set; }
public Student Student { get; set; }
//composite key
[Key, Column (Order=1)]
public int StudentID { get; set; }
[Key, Column (Order=2)]
public int CourseID { get; set; }
public DateTime EnrolledDate { get; set; }
}
主要方法:
using(var db = new EmployeeDBcontext())
{
StudentCourse stcourse1 = new StudentCourse();
Student st1 = new Student("Francis");
Course cs1 = new Course("Bio");
stcourse1.StudentID = st1.StudentID;
stcourse1.CourseID = cs1.CourseID;
stcourse1.EnrolledDate = new DateTime(2012, 1, 1);
db.StudentCourses.Add(stcourse1);
db.Courses.Add(cs1);
db.Student.Add(st1);
Student st2 = new Student("Jack");
Course cs2 = new Course("Hist");
db.Student.Add(newStud);
db.Courses.Add(newCor);
db.SaveChanges();
//Method calls
Remove(11)
AddNew(st2 , cs2 , new DateTime(2018, 1, 1));
}
从数据库中删除的方法:
public static void Remove(int csID)
{
using (var db=new EmployeeDBcontext())
{
StudentCourse temp = new StudentCourse();
foreach (var item in db.StudentCourses)
{
if(item.StudentID == csID )
{
temp = item;
}
}
db.StudentCourses.Remove(temp);
db.SaveChanges();
}
}
添加新方法:
public static void AddNew(Student s, Course c,DateTime d)
{
using (var db = new EmployeeDBcontext())
{
StudentCourse newCourse = new StudentCourse();
newCourse.StudentID = s.StudentID;
newCourse.CourseID = c.CourseID;
newCourse.EnrolledDate = d;
db.StudentCourses.Add(newCourse);
db.SaveChanges();
}
}
答案 0 :(得分:1)
在表dbo.StudentCourses_dbo中,它具有对另一个表的外键引用。您必须首先构建包含主键的表。即dbo。课程。
当前,您正在尝试将数据插入到dbo.Courses中没有CourseID引用的dbo.StudentCourses_dbo表中。即,您必须先将数据插入包含主键的父表中,然后再尝试将数据插入包含外键的子表中。
因此在您的示例中,您必须先创建课程实体来添加课程,然后使用创建的课程ID来添加学生。这应该可以解决您的问题。希望对您有帮助。