簡體   English   中英

如何在 EF 中執行 CRUD 操作

[英]How to perform CRUD operation in EF

我需要編寫將在我的 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();
   }
}

在您的表 dbo.StudentCourses_dbo 中,它具有對另一個表的外鍵引用。 您必須首先構建包含主鍵的表。 即 dbo.Courses。

當前,您正在嘗試在 dbo.StudentCourses_dbo 表中插入數據,該表在 dbo.Courses 中沒有 CourseID 引用。 即,在嘗試將數據插入包含外鍵的子表之前,您必須將數據插入包含主鍵的父表中。

因此,在您的示例中,您必須先創建課程實體以添加課程,然后使用創建的課程 ID 添加學生。這應該可以解決您的問題。 希望這對你有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM