在编辑后更新数据时,它会插入重复的课程

时间:2016-09-15 01:05:11

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

在编辑视图中,当我在员工姓名中编辑时,然后单击保存按钮进行保存 它再次插入课程,以便找到两次课程。

下面的图片显示

when update it duplicate courses

我有这个型号Cusomemp2

这是用于两个表中的更新数据的自定义模型

员工和员工课程

 public class Cusomemp2
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public List<EmployeeCourse> empcourses { get; set; }

    }

} 

当我需要更新员工和员工课程表时

我在httppost中编写以下代码

 [HttpPost]
        public ActionResult Edit(Cusomemp2 custom)
        {
            Employee e1 = db.Employees.Find(custom.Id);
            e1.Name = custom.Name;

            e1.EmployeeCourses = custom.empcourses;

            db.SaveChanges();

            return View();
        }

在编辑视图中我将jquery写成如下

var index = 0;
            $("#CourseId").change(function () {

                var id = $(this).val();
                var txt = $("#CourseId option:selected").text();
                $("#tb").append("<tr><td><input type = 'hidden' name='empcourses[" + index + "].CourseId' value='" + id + "'/></td><td>" + txt + "</td><td><input type='button' value='remove' class='r'</td></tr>")

                index++;
            });
            $("#tb").on("click", ".r", function () {
                $(this).parent().parent().hide();
                $(this).parent().prev().prev().find("input").val("0");
            });
            button for save as following


<input type="submit" value="save" />

更新

[HttpPost]
        public ActionResult Edit(Cusomemp2 custom)
        {

            var result = db.Employees
                 .Where(p => p.Id == custom.Id)
                 .Include(c => c.EmployeeCourses)
                 .FirstOrDefault();

            if (custom.empcourses.Any())
        {
            foreach (var ec in result.EmployeeCourses.ToList())//to remove existing EmployeeCourses
            {
                db.EmployeeCourses.Remove(ec);
                db.SaveChanges();

            }
        }

            result.Name = custom.Name;

            result.EmployeeCourses = custom.empcourses;
            db.SaveChanges();



            return View();
        }

更新

直到现在问题没有解决上面这段代码的结果删除所有课程

以便我添加新链接以删除

how to delete assigned courses only not all courses for employee

1 个答案:

答案 0 :(得分:0)

您可以尝试如下所示。

注意: Ef不会自动更新子条目。所以你必须手动完成,如下所示。

    [HttpPost]
    public ActionResult Edit(Cusomemp2 custom)
    {
       var result = db.Employees
                 .Where(p => p.Id == custom.Id)
                 .Include(c => c.EmployeeCourses)
                 .FirstOrDefault();

    if(custom.empcourses.Any())
     {
     foreach (var ec in result.EmployeeCourses.ToList())//to remove existing EmployeeCourses
       {
         db.EmployeeCourses.Remove(ec);
         db.SaveChanges();
       }
   }

      result.Name = custom.Name;
      result.EmployeeCourses = custom.empcourses;
      db.SaveChanges();

      return View();
     }