【问题标题】:how i update multiple table using viewmodel in Asp.net mvc我如何在 Asp.net mvc 中使用 viewmodel 更新多个表
【发布时间】:2018-06-11 21:39:19
【问题描述】:

员工模型

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
}

PostMethod

 [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");
        }

但是在这个方法中只更新员工记录而不是部门

【问题讨论】:

标签: c# asp.net-mvc entity-framework-6 viewmodel asp.net-mvc-viewmodel


【解决方案1】:

经过多次搜索,我终于得到了一个可靠的解决方案 希望您喜欢或改进它。

控制器

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

【讨论】:

    【解决方案2】:

    它对我有用 删除这个

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

    如果我们不删除这个entityvalidation 发生

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-17
      • 2020-09-12
      • 2018-12-11
      • 2016-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多