问题描述
我想在存储员工工资时使用AddRange()方法。但是在执行context.context.EmployeeSalaries.AddRange(employeeSalaries);
时我得到了异常
无法跟踪实体类型“ Outlet”的实例,因为已经跟踪了另一个具有键值的实例。附加现有实体时,请确保仅附加一个具有给定键值的实体实例。
这是方法:
public bool PaySalary(List<EmployeeSalary> employeeSalaries)
{
using (DatabaseContext context = new DatabaseContext())
{
context.EmployeeSalaries.AddRange(employeeSalaries);
context.SaveChanges();
}
}
EmployeeSalary类结构:
public class EmployeeSalary
{
public int Id { get; set; }
public float SalaryPerDay { get; set; }
public float Days { get; set; }
public float PaidSalary { get; set; }
public DateTime DateTime { get; set; }
public virtual Outlet Outlet { get; set; }
public virtual User Employee { get; set; }
}
有什么建议我可以快速做到吗?
解决方法
问题在于,在您的 EmployeeSalary 对象列表中,有两个或多个引用具有相同键但不完全相同的对象的 Outlet 对象。如果您在保存这些 EmployeeSalary 对象时不需要保存 Outlet 对象,那么您可以通过将每个 EmployeeSalary.Outlet 设置为 null 来解决这个问题