首页 > 解决方案 > 无法跟踪实体类型“Outlet”的实例,因为已在跟踪具有键值的另一个实例

问题描述

我想在存储员工工资时使用 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; }
    }

有什么建议我可以快速做到吗?

标签: c#entity-framework-core-3.1

解决方案


问题是,在您的 EmployeeSalary 对象列表中,有两个或多个引用具有相同键但不完全相同的对象的 Outlet 对象。如果您在保存这些 EmployeeSalary 对象时不需要保存 Outlet 对象,那么您可以通过将每个 EmployeeSalary.Outlet 设置为 null 来解决此问题


推荐阅读