【问题标题】:How to perform CRUD operation in EF如何在 EF 中执行 CRUD 操作
【发布时间】:2019-11-24 09:53:45
【问题描述】:

我需要编写将在我的 EF 数据库中执行插入和删除的方法。

当我尝试添加新对象时,我收到以下错误消息:

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();
   }
}

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-12-28
      • 1970-01-01
      • 2011-02-08
      • 2014-11-23
      • 1970-01-01
      • 2019-06-24
      • 1970-01-01
      • 2016-07-01
      • 1970-01-01
      相关资源
      最近更新 更多