1

我想在我的表中存储历史记录。

我有桌子Employee

Employee
{
    [Id],
    [name],    
    [phone],    
    [isActive],    
    [createdDate],     
    [closedDate](default '23:59:59 9999-12-31'),     
    [DepartmentId] References Department(id)    
}

更改时Employee,我检索原始值Id并执行isActive=False, closedDate=DateTime.Now,然后将修改后的值保存为Employee带有修改后的原始值的新值。

void UpdateEmployee(Employee employee)
{
    ContextDB db=new ContextDB();
    var employeeToUpdate=db.Employees.Find(it=>it.Id==employee.Id);
    employeeToUpdate.isActive=false;
    employeeToUpdate.closeDate=DateTime.Now;
    var newEmployee=new Employee
    {
        Name=employee.Name,
        Phone=employee.Phone,
        .... 
    }

    db.Employees.AddObject(newEmployee);

    // How I can do this with EF
    db.Employees.Modify(employeeToUpdate);

    db.SaveChanges();
}

我怎样才能做到这一点?还有一个问题,如果我引用了另一个表Department并且还想在这个表中存储历史记录,我需要做什么。Department如果对象发生变化我该怎么办Employee

PS我使用自我跟踪实体。

4

1 回答 1

2

它应该简单地工作而无需调用任何Modify. 您从数据库中加载了实体,并在它附加到上下文时修改了它的字段,因此上下文应该知道更改并将它们保存到数据库中。

我发现您的体系结构完全不好的是,对您的员工的每次更改都会导致与另一个员工的主动记录Id。因此,如果您使用和关联员工表,外键将不再指向活动记录。如果您想这样做,则不应为活动记录创建新记录,而应为停用记录创建新记录。

于 2011-07-14T07:55:02.163 回答