C# 更新时,外键列不断递增

C# 更新时,外键列不断递增,c#,sql-server,entity-framework,C#,Sql Server,Entity Framework,我有两个类,Department和Employee,还有一个DbContext类EmployeeDbContext和一个repository类,其中包含Employee的CRUD操作,名为EmployeeRepository 然后我创建了一个webform,它有一个网格视图、一个细节视图和一个对象数据源。我使用代码优先的方法,因此解决方案将自动生成数据库。我的问题是,每当我编辑一条记录时,DepartmentId列就会不断递增。我做错了什么 public class Department {

我有两个类,
Department
Employee
,还有一个
DbContext
EmployeeDbContext
和一个repository类,其中包含
Employee
的CRUD操作,名为
EmployeeRepository

然后我创建了一个webform,它有一个网格视图、一个细节视图和一个对象数据源。我使用代码优先的方法,因此解决方案将自动生成数据库。我的问题是,每当我编辑一条记录时,
DepartmentId
列就会不断递增。我做错了什么

public class Department
{
    public int DepartmentId { get; set; }
    public string Name { get; set; }
    public string Location { get; set; }
    public List<Employee> Employees { get; set; }

    public Department()
    {
        DepartmentId = 0;
        Name = "";
        Location = "";
        Employees = new List<Employee>();
    }
}

public class Employee
{
    public int EmployeeId { get; set; }
    public string LastName { get; set; }
    public string FirstName { get; set; }
    public string MiddleName { get; set; }
    public string Gender { get; set; }
    public decimal Salary { get; set; }
    public int DepartmentId { get; set; }
    public Department Department { get; set; }

    public Employee()
    {
        EmployeeId = 0;
        LastName = "";
        FirstName = "";
        MiddleName = "";
        Gender = "";
        Salary = 0;
        DepartmentId = 0;
        Department = new Department();
    }
}

public class EmployeeDbContext :DbContext
{
    public DbSet<Employee> Employees { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Employee>().MapToStoredProcedures();
        base.OnModelCreating(modelBuilder);
    }
}

public class EmployeeRepository 
{
    DemoEnt.EmployeeDbContext employeeDb = new DemoEnt.EmployeeDbContext();

    public List<Employee> SelectMany()
    {
        try
        {
            return employeeDb.Employees.ToList();
        }
        catch (Exception)
        {
            return new List<Employee>();
        }
    }

    public void Insert(Employee param)
    {
        employeeDb.Employees.Add(param);
        employeeDb.SaveChanges();
    }

    public void Update(Employee param)
    {
        Employee emp = employeeDb.Employees.FirstOrDefault(x => x.EmployeeId == param.EmployeeId);

        if (emp != null)
        {
            emp.LastName = param.LastName;
            emp.FirstName = param.FirstName;
            emp.Gender = param.Gender;
            emp.Salary = param.Salary;
            emp.DepartmentId = param.DepartmentId;
            employeeDb.SaveChanges();
        }
    }

    public void Delete(Employee param)
    {
        Employee emp = employeeDb.Employees.FirstOrDefault(x => x.EmployeeId == param.EmployeeId);
        if (emp != null)
        {
            employeeDb.Employees.Remove(emp);
            employeeDb.SaveChanges();
        }
    }
}


您默认的
员工
构造函数具有:

Department = new Department();
基本上,如果不使用部门查询员工,则每次执行更新时都会为员工重新创建部门。我建议你把它去掉。您还可以使用
。Include(…)
让员工了解部门:

Employee employee = employeeDb.Employees
    .Include(employee => employee.Department)
    .FirstOrDefault(employee => employee.EmployeeId == param.EmployeeId);

默认的
员工
构造函数具有:

Department = new Department();
基本上,如果不使用部门查询员工,则每次执行更新时都会为员工重新创建部门。我建议你把它去掉。您还可以使用
。Include(…)
让员工了解部门:

Employee employee = employeeDb.Employees
    .Include(employee => employee.Department)
    .FirstOrDefault(employee => employee.EmployeeId == param.EmployeeId);

您还需要对您的PKs使用
[Key]
属性,例如
部门ID
员工ID
您还需要对您的PKs使用
[Key]
属性,例如
部门ID
员工ID
我尝试过这个。包括(employee=>employee.Department),生成错误。使用System.Data.Entity添加
能够将lamba表达式作为参数传递给
。包括
。我尝试了这个。Include(employee=>employee.Department),它生成了错误
能够将lamba表达式作为参数传递给
。包括
。这应该可以修复错误。