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表达式作为参数传递给。包括。这应该可以修复错误。