C# 如何在Asp.net mvc中使用viewmodel更新多个表

C# 如何在Asp.net mvc中使用viewmodel更新多个表,c#,asp.net-mvc,entity-framework-6,viewmodel,asp.net-mvc-viewmodel,C#,Asp.net Mvc,Entity Framework 6,Viewmodel,Asp.net Mvc Viewmodel,员工模式 public class Employee { [Key] public int EmployeeID { get; set; } public string Name { get; set; } public virtual Department Departments { get; set; } public int DepartmentID { get; set; } } publi

员工模式

public class Employee
    {
        [Key]
        public int EmployeeID { get; set; }
        public string Name { get; set; }
        public virtual Department Departments { get; set; }
        public int DepartmentID { get; set; }
    }
public class Department
    {
        public int DepartmentID { get; set; }
        public string DepartmentName { get; set; }
    }
部门模式

public class Employee
    {
        [Key]
        public int EmployeeID { get; set; }
        public string Name { get; set; }
        public virtual Department Departments { get; set; }
        public int DepartmentID { get; set; }
    }
public class Department
    {
        public int DepartmentID { get; set; }
        public string DepartmentName { get; set; }
    }
部门和员工的视图模型

public class EDViewModel
    {
        public int ID { get; set; }
        public int EmployeeID { get; set; }
        public string Name { get; set; }
        public Department Departments { get; set; }
        public int DepartmentID { get; set; }
        public string DepartmentName { get; set; }
    }
现在我想用单视图更新这两个表

控制器

public ActionResult Edit(int?id)
        {
// write some code for update both table at once time
}
后方法

 [HttpPost]
        public ActionResult Edit(EDViewModel Emodel)
        {
            var user = db.Employees.Where(c => c.Employee_Id == Emodel.Employee_Id).FirstOrDefault();
            user.UserName = Emodel.UserName;
            user.ProfilePicture = Emodel.ProfilePicture;
            db.Entry(user).State = EntityState.Modified;
            db.Entry(user).State = EntityState.Modified;
            db.SaveChanges();
            return RedirectToAction("Home");
        }
但在这种方法中,只更新员工记录,不更新部门记录


经过多次搜索,我终于得到了一个固溶体 希望你喜欢或改进这个

控制器

 public ActionResult Edit(int? id)
        {
            MYDb db = new MYDb();
            var user = db.Employees.Where(c => c.Employee_Id == Emodel.Employee_Id).FirstOrDefault();
            if (user != null)
            {
                var vm = new EDViewModel { Employee_id = user.Employee_id, departmentName = user.departmentName };
                if (user.department != null)
                {
                    user.Departmet_id = vm.Departments.Departmet_id;
                    user.DepartmentName = vm.Departments.DepartmentName;
                    user.Employee_id = vm.employee_id;
                    user.employeeName = vm.employeeName;
                }
                return View(user);
            }
            return Content("Invalid Id");
        }

 [HttpPost]
        public ActionResult Edit(EDViewModel Emodel)
        {
            var user = db.Employees.Where(c => c.Employee_Id == Emodel.Employee_Id).FirstOrDefault();
            user.EmployeeId = Emodel.EmployeeId;
            user.EmployeeName= Emodel.EmployeeName;
          user.DepartmentName= Emodel.Departmt.DepartmentName;
         // Just remove this line
          //  db.Entry(user).State = EntityState.Modified;
            db.SaveChanges();
            return RedirectToAction("Home");
        }
它对我有用 把这个拿走

 db.Entry(user).State = EntityState.Modified;

如果我们不删除此实体验证发生

请对此进行讨论,这可能会对您有所帮助。您可以向我们展示一些您已经尝试但失败的内容吗?感谢您的评论,请再次检查代码我更新它:)