我写了一个功能,我正在更新员工的详细信息。 每次成功更新时,我都必须将Employee的旧记录记录到历史记录表中。
所以我需要将旧记录保存在内存变量中,然后一旦SaveChanges()成功完成,我必须将它传递给LogHistory(),它接受一个Employee对象并将一个带有旧员工记录的条目添加到Employee_History表
在下面的代码中,一旦调用了SaveChanges(),变量oldEmployee也会更新并添加更新的Employee记录,而不是添加旧员工的详细信息。
public void UpdateEmployee(int employeeID, Employee personalInfo)
{
var employee = context.Employees.FirstOrDefault(clnt => clnt.PK_EmployeeID == employeeID);
var oldEmployee = context.Employees.FirstOrDefault(clnt => clnt.PK_EmployeeID == employeeID);
if (employee != null)
{
employee.FirstName = personalInfo.FirstName;
employee.LastName = personalInfo.LastName;
//Update Client details
context.SaveChanges();
//Logging History for previous Client details
context.LogTransaction(oldEmployee);
}
}
请建议并帮助我克服这种情况。
答案 0 :(得分:0)
变量employee
和oldEmployee
都指向相同的引用,即您正在更新和保存的员工。您必须先创建employee
的副本,然后再将其提交给日志记录。
您可以通过各种方式创建副本。其中一个是使用CurrentValues
:
var oldEmployee = context.Entry(employee).CurrentValues.ToObject();
或者只是创建一个新员工并复制属性。