如何在EF中执行CRUD操作

时间:2019-11-24 09:53:45

标签: c# .net entity-framework many-to-many

我需要编写将在我的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();
   }
}

1 个答案:

答案 0 :(得分:1)

在表dbo.StudentCourses_dbo中,它具有对另一个表的外键引用。您必须首先构建包含主键的表。即dbo。课程。

当前,您正在尝试将数据插入到dbo.Courses中没有CourseID引用的dbo.StudentCourses_dbo表中。即,您必须先将数据插入包含主键的父表中,然后再尝试将数据插入包含外键的子表中。

因此在您的示例中,您必须先创建课程实体来添加课程,然后使用创建的课程ID来添加学生。这应该可以解决您的问题。希望对您有帮助。