Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何在EF多对多关系中添加新记录?_.net_Entity Framework - Fatal编程技术网

.net 如何在EF多对多关系中添加新记录?

.net 如何在EF多对多关系中添加新记录?,.net,entity-framework,.net,Entity Framework,我正在做我的教程项目,我是实体框架的新手 我使用代码优先的方法有两个多关系表: 以下是表格定义: class EmployeeDBContext : DbContext { public EmployeeDBContext() : base("DefaultConnection") { } public DbSet<Course> Courses { get; set; } public DbSet<Student> Students { ge

我正在做我的教程项目,我是实体框架的新手

我使用代码优先的方法有两个多关系表:

以下是表格定义:

 class EmployeeDBContext : DbContext
{
    public EmployeeDBContext() : base("DefaultConnection") { }
    public DbSet<Course> Courses { get; set; }
    public DbSet<Student> Students { get; set; }
}

//================================================My entities=================================================
public class Student
{
    [Key]
    public int StudentID { get; set; }
    public string StudentName { get; set; }
    public virtual ICollection<Course> Courses { get; set; }
}

public class Course
{

    [Key]
    public int CourseID { get; set; }
    public string CourseName { get; set; }
    public virtual ICollection<Student> Students { get; set; }
}
class EmployeeDBContext:DbContext
{
public EmployeeDBContext():base(“DefaultConnection”){}
公共数据库集课程{get;set;}
公共数据库集学生{get;set;}
}
//==========================================================================我的实体=================================================
公立班学生
{
[关键]
公共int StudentID{get;set;}
公共字符串StudentName{get;set;}
公共虚拟ICollection课程{get;set;}
}
公共课
{
[关键]
public int CourseID{get;set;}
公共字符串CourseName{get;set;}
公共虚拟ICollection学生{get;set;}
}
课程表上有三个科目:历史、数学、物理

我需要添加新学生,并将该学生与现有课程联系起来

知道如何实现它吗?

请尝试下面的代码: 取决于是否要更新课程名称或添加学生列表

     public void UpdateCourse(string courseName, List<Student> students)
        {
            var dbInstance = new EmployeeDBContext();
            Course model = (from item in dbInstance.Courses
                            where item.CourseID = courseid
                            select item);
            model.CourseName = courseName;
            foreach(var item in  students)
              {     
               var currentStudent = from stud in dbInstance.Students
                       where stud.StudentId == item.StudentId;
               if( currentStudent != null) 
                 currentStudent.Name = item.Name; 
                else
                  dbInstance.Students.Add(new Student() {.StudentId = item.StudentId, .Name = item.Name});
            }; 
            dbInstance.SaveChanges(); 
        }


 public void CreateCourse(string courseName, List<Student> students)
    {
        var model = new Course();
        model.CourseName = courseName;
        model.Students = students;
        var dbInstance = new EmployeeDBContext();
        dbInstance.Courses.Add(model); 
        dbInstance.SaveChanges();
    }
public void UpdateCourse(字符串courseName,列出学生)
{
var dbInstance=new EmployeeDBContext();
课程模型=(来自dbInstance.Courses中的项目
其中item.CourseID=CourseID
选择项目);
model.CourseName=CourseName;
foreach(学生中的var项目)
{     
var currentStudent=来自dbInstance.Students中的stud
其中stud.StudentId==item.StudentId;
如果(currentStudent!=null)
currentStudent.Name=item.Name;
其他的
dbInstance.Students.Add(new Student(){.StudentId=item.StudentId、.Name=item.Name});
}; 
dbInstance.SaveChanges();
}
公共课程(字符串courseName,列出学生)
{
var模型=新课程();
model.CourseName=CourseName;
模型。学生=学生;
var dbInstance=new EmployeeDBContext();
dbInstance.Courses.Add(模型);
dbInstance.SaveChanges();
}

如果您需要创建一个学生并为他添加一门课程(或更多课程),使用EF的方法与使用文字描述的方法相同

using (var ctx= new EmployeeDBContext())
{
    // Create a new student (and set some properties)
    Student student = new Student()
    {
        StudentName = "Scott Tiger"
    };

    // Replace courseId with the course id that you need to add to the student
    student.Courses.Add(ctx.Courses.Find(courseId));
    // Add other courses if you need to

    // Let's write the student to the DB
    ctx.Students.Add(student);
    ctx.SaveChanges();

}

你有没有尝试过简单地提取你想要的课程,将它们添加到学生的课程集合中,然后保存学生?@eranotzap,没有,对我来说,这似乎很复杂,因为在EF中更新了。下面的答案正是我解释的。试试看。此外,花点时间看一个完整的EntityFramework课程,这会比你自己动手写节省更多的时间。。。Pluralsight有一个关于ef的课程,你可以很容易地找到它的种子。我没有课程名称,但我的课程ID已经存在于数据库中了!那么为什么我必须创建一个新课程呢?对,这是从函数名创建一个新课程。@Muks代码就是一个示例。如果你已经有了新的课程,你不需要创建新的课程。此外,示例创建课程并将学生添加到其中,但您也可以创建学生并添加课程。@Muks,您尝试过吗?我认为它不能工作。我认为学生应该在课程的同一个上下文中,但是你在函数中创建上下文。