对象上的实体框架相关实体未更新

时间:2017-01-18 10:31:09

标签: c# entity-framework

每当我尝试更改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);
    }

0 个答案:

没有答案