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