更新多表关系中的数据(员工和员工课程表)

时间:2016-09-04 14:33:44

标签: asp.net-mvc-4 linq-to-sql linq-to-entities entity-framework-6

我在一对多关系中有两个表employeeemployee course

需要:更新表employee中的名称和编辑视图中courseid表中的employeecourse

问题:在编辑视图中点击提交按钮时,它会删除所有数据并仅保存选定的

刚刚下拉课程的课程

如果点击提交

时(通过添加或删除课程)课程没有发生任何变化

按住它删除所有

代码逻辑

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

更改后

意思是提交按钮执行两项任务

  1. 以前为员工编辑视图

  2. 的删除课程
  3. 在此员工的编辑视图中完成所有更改后添加课程

  4. 见下图

    enter image description here

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

    更新

    public ActionResult Edit(EditEmployeeVm model)

        {
            var emp = db.Employees.FirstOrDefault(f => f.Id == model.Id);
    
            foreach (var couseid in model.CourseIds)
            {
                db.EmployeeCourses.Add(new EmployeeCourse { CourseId = couseid, EmployeeId = emp.Id });
                db.SaveChanges();
    
            }
    
            return View();
        }
    

    我在更新部分尝试上面的代码 我可以在点击提交按钮时添加数据并保存 但是点击删除按钮到jquery当然的问题 它删除它但不保存数据库中删除的更改 这样当再次打开编辑视图时,我看到之前删除的项目 单击“提交”按钮以保存在数据库中删除的项目

    时如何解决该问题

0 个答案:

没有答案