c# - 无法跟踪实体类型“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; }
}
有什么建议我可以快速做到吗?
解决方案
问题是,在您的 EmployeeSalary 对象列表中,有两个或多个引用具有相同键但不完全相同的对象的 Outlet 对象。如果您在保存这些 EmployeeSalary 对象时不需要保存 Outlet 对象,那么您可以通过将每个 EmployeeSalary.Outlet 设置为 null 来解决此问题
推荐阅读
- email - 在 PayPal 中,如何从电子邮件中获取客户 ID 和密码
- c# - 使用 c# 按下 ctrl+alt+del 时阻止蓝屏出现
- php - SQLSTATE[42S02]:在 laravel 5.4 项目中迁移时找不到基表或视图
- android - Crystax 建造谷神星时遇到的错误
- jquery - 如果它有一些 css 则有条件
- java - 单击按钮时将动画设置为反向移动并显示类的形状
- python - 提高大矩阵自举算法的效率
- firefox-addon-webextensions - 如何拦截 WebSocket 数据?
- xml - 400 错误请求:XML 文档中存在错误 (1, 1254) 消息显示不正确的行号
- java - 分叉加入池挂起