Как я могу обновить несколько таблиц, используя viewmodel в Asp.net MVC - PullRequest
0 голосов
/ 12 июня 2018

Модель сотрудника

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

Но в этом методе только обновление записи сотрудника, а не отдела

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

это сработало для меня, просто удалите это

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

, если мы не удалим это подтверждение сущности происходит

0 голосов
/ 12 июня 2018

После долгих поисков, наконец, я получаю твердое решение, надеюсь, вам понравится или улучшится.

Контроллер

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