每当我尝试更改Employee类的Department和Position对象时,它们都不会在Employee实体的数据库内更新。例如,我想将员工职位从初级(id - 1,职位名称 - 初级)更改为中级(id - 2,职位名称 - 中间)。但是,每当我尝试将此更改保存到数据库时,它们都不适用。
我的员工实体
public class Employee
{
public int EmployeeId { get; set; }
public string FullName { get; set; }
public Department Department { get; set; }
public EmployeePosition Position { get; set; }
public string Head { get; set; }
public double Salary { get; set; }
public Employee()
{
Department = new Department();
Position = new EmployeePosition();
}
}
EmployeePosition实体
public class EmployeePosition
{
public int Id { get; set; }
public string Name { get; set; }
}
我在ViewModel中修改员工方法
public void ModifyEmployee(int id)
{
Employee employee = employeeRepository.GetEmployee(id);
using (var context = new PowerCoEntity())
{
employee.Position = context.EmployeePositions.FirstOrDefault(d => d.Id == SelectedPositionId);
employee.Department = context.Deprtments.FirstOrDefault(d => d.DepartmentId == SelectedDepartmentId);
if (SelectedHeadId != null)
employee.Head = employeeRepository.GetHeadName(SelectedHeadId.Value);
else employee.Head = "";
}
employee.Salary = Employee.Salary;
employee.FullName = Employee.FullName;
employeeRepository.ModifyEmployee(employee);
}
修改上下文类中的方法
public void ModifyEmployee(Employee employee)
{
using (var context = new PowerCoEntity())
{
context.Entry(employee).State = EntityState.Modified;
context.SaveChanges();
}
}
更新1
我通过更改ViewModel和Context类中的ModifyEmployee方法来实现它。但我现在需要通过方法传递所有参数。我怎样才能使用不同的上下文来修改对象? 上下文类:
public void ModifyEmployee(int id, int selectedPositionId, int selectedDepartmentId, int? selectedHeadId, Employee employee)
{
using (var context = new PowerCoEntity())
{
Employee emp = context.Employees.FirstOrDefault(e=> e.EmployeeId == 32);
emp.Salary = employee.Salary;
emp.FullName = employee.FullName;
emp.Department = employee.Department;
emp.Position = context.EmployeePositions.FirstOrDefault(d => d.Id == selectedPositionId);
emp.Department = context.Deprtments.FirstOrDefault(d => d.DepartmentId == selectedDepartmentId);
if (selectedHeadId != null)
emp.Head = GetHeadName(selectedHeadId.Value);
else emp.Head = "";
emp.Salary = employee.Salary;
emp.FullName = employee.FullName;
context.Entry(emp).State = EntityState.Modified;
context.SaveChanges();
}
}
视图模型:
public void ModifyEmployee(int id)
{
Employee employee = new Employee();
employee.Salary = Employee.Salary;
employee.FullName = Employee.FullName;
employeeRepository.ModifyEmployee(id, SelectedPositionId, SelectedDepartmentId, SelectedHeadId, employee);
}