2011-07-14 133 views
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更改對象。

P.S.我使用自我跟蹤實體。

+0

你的代碼有什麼問題? –

回答

2

應該只是沒有調用任何Modify工作。您從數據庫加載實體,並且在它連接到上下文時修改了它的字段,以便上下文知道更改並將它們保存到數據庫中。

我覺得完全壞關於你的架構是什麼每次更改你的員工將導致與另一Id活動記錄。因此,如果您正在使用與員工表的關係,則外鍵不會再指向活動記錄。如果您想這樣做,則不應爲活動記錄創建新記錄,而應該爲停用的記錄創建新記錄。

+0

所以我如何停用記錄,使用Detach from ObjectContext?這是什麼意思_如果你正在使用和與員工表的關係,外鍵不會再指向活動記錄__?謝謝你的答案。 –

+0

你瞭解數據庫設計的基礎知識嗎?如果您有其他表與您的員工表有關係並將外鍵指向您的員工表中的任何記錄,那麼在您更改後,該外鍵將指向停用的記錄。 –

+0

我很困惑。如果我通過更改此實體(或另一個字段中的字段部門,我沒有看到任何參考)來更改員工記錄,我希望將舊的實體標記爲isActive = false,並使用isActive = true創建新的實體員工。我想我可以保留一位改變歷史的員工。也許有更好的解決方案。如果不難,你可以舉個簡單的例子。謝謝 –

相關問題