Asp.net mvc 4 更新多表关系中的数据(employee和employeecourse表)

Asp.net mvc 4 更新多表关系中的数据(employee和employeecourse表),asp.net-mvc-4,linq-to-sql,linq-to-entities,entity-framework-6,Asp.net Mvc 4,Linq To Sql,Linq To Entities,Entity Framework 6,我有两个表employee和employee course,它们是一对多关系 需要:在编辑视图中更新表员工中的姓名和员工课程表中的课程ID 问题:单击“编辑视图”中的“提交”按钮时,将删除所有数据并仅保存选定的数据 刚才下拉式课程中的课程 如果在单击“提交”时(添加或删除课程)未对课程进行任何更改 按按钮删除所有内容 代码逻辑 我尝试在单击提交时使用逻辑删除所有数据,然后保存所有数据 变动后 意思是提交按钮做两个任务 删除“我编辑的员工”视图之前存在的课程 在此员工的“编辑”视图中完成所有更改后

我有两个表
employee
employee course
,它们是一对多关系

需要:在编辑视图中更新表
员工
中的姓名和
员工课程
表中的
课程ID

问题:单击“编辑视图”中的“提交”按钮时,将删除所有数据并仅保存选定的数据

刚才下拉式课程中的课程

如果在单击“提交”时(添加或删除课程)未对课程进行任何更改

按按钮删除所有内容

代码逻辑

我尝试在单击提交时使用逻辑删除所有数据,然后保存所有数据

变动后

意思是提交按钮做两个任务

  • 删除“我编辑的员工”视图之前存在的课程

  • 在此员工的“编辑”视图中完成所有更改后添加课程

  • 见下图

    代码

     model class EditEmployeeVm
        public class EditEmployeeVm
        {
            public int Id { set; get; }
            public string Name { get; set; }
            public List<SelectListItem> Courses { get; set; }
            public int[] CourseIds { set; get; }
            public List<CourseVm> ExistingCourses { set; get; }
        }
    
        public class CourseVm
        {
            public int Id { set; get; }
            public string Name { set; get; }
        }
        in edit function get i pass data to edit view
    
            public ActionResult Edit(int id)
            {
             var vm = new EditEmployeeVm { Id = id };
                    var emp = db.Employees.FirstOrDefault(f => f.Id == id);
                    vm.Name = emp.Name;
                    vm.ExistingCourses = db.EmployeeCourses
                                            .Where(g => g.EmployeeId == id)
                                            .Select(f => new CourseVm
                                            {
                                                Id = f.Id,
                                                Name = f.Course.CourseName
                                            }).ToList();
    
                    vm.CourseIds = vm.ExistingCourses.Select(g => g.Id).ToArray();
                    vm.Courses = db.Courses.Select(f => new SelectListItem
                    {
                        Value = f.Id.ToString(),
                        Text = f.CourseName
                    }).ToList();
    
                    return View(vm);
            }
         [HttpPost]
                public ActionResult Edit(EditEmployeeVm model)
                {
            **//i need to save name employee changes in employee table and all courses changes in emloyeecourse table
            //what is wrong here**
               var emp = db.Employees
                           .Include(e => e.EmployeeCourses)
                           .FirstOrDefault(f => f.Id == model.Id);
    
                    foreach (var eec in emp.EmployeeCourses.ToList())
                    {
                        db.EmployeeCourses.Remove(eec);
                    }
    
                    foreach (var couseid in model.CourseIds)
                    {
                        db.EmployeeCourses.Add(new EmployeeCourse { CourseId = couseid, EmployeeId = emp.Id });
                    }
    
                    db.SaveChanges();
    
                    return View();
                }  
    
    我在上面的“更新”部分下尝试代码 单击“提交”按钮时,我可以添加数据并保存 但是,当单击remove按钮通过jquery设置课程时出现问题 它会删除它,但不会将删除的更改保存到数据库中 这样,当再次打开“编辑视图”时,我会看到以前删除的项目 如何解决单击“提交”按钮将删除的项目保存到数据库中时出现的问题

     model class EditEmployeeVm
        public class EditEmployeeVm
        {
            public int Id { set; get; }
            public string Name { get; set; }
            public List<SelectListItem> Courses { get; set; }
            public int[] CourseIds { set; get; }
            public List<CourseVm> ExistingCourses { set; get; }
        }
    
        public class CourseVm
        {
            public int Id { set; get; }
            public string Name { set; get; }
        }
        in edit function get i pass data to edit view
    
            public ActionResult Edit(int id)
            {
             var vm = new EditEmployeeVm { Id = id };
                    var emp = db.Employees.FirstOrDefault(f => f.Id == id);
                    vm.Name = emp.Name;
                    vm.ExistingCourses = db.EmployeeCourses
                                            .Where(g => g.EmployeeId == id)
                                            .Select(f => new CourseVm
                                            {
                                                Id = f.Id,
                                                Name = f.Course.CourseName
                                            }).ToList();
    
                    vm.CourseIds = vm.ExistingCourses.Select(g => g.Id).ToArray();
                    vm.Courses = db.Courses.Select(f => new SelectListItem
                    {
                        Value = f.Id.ToString(),
                        Text = f.CourseName
                    }).ToList();
    
                    return View(vm);
            }
         [HttpPost]
                public ActionResult Edit(EditEmployeeVm model)
                {
            **//i need to save name employee changes in employee table and all courses changes in emloyeecourse table
            //what is wrong here**
               var emp = db.Employees
                           .Include(e => e.EmployeeCourses)
                           .FirstOrDefault(f => f.Id == model.Id);
    
                    foreach (var eec in emp.EmployeeCourses.ToList())
                    {
                        db.EmployeeCourses.Remove(eec);
                    }
    
                    foreach (var couseid in model.CourseIds)
                    {
                        db.EmployeeCourses.Add(new EmployeeCourse { CourseId = couseid, EmployeeId = emp.Id });
                    }
    
                    db.SaveChanges();
    
                    return View();
                }