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 に答える