2010-06-30 295 views
1

我有一個EDM,它包括實體擴展和歷史記錄。我的目標是使用歷史記錄來跟蹤對擴展實體所做的所有更改。例如,如果ID爲223的擴展名的屬性'Name_Display'已更改 - 我希望歷史實體記錄此信息。實體框架:更新實體時更新另一個實體

我在ASP.NET中使用VB.NET。在我的代碼中,我可以掛鉤說「更新歷史實體」,該鉤子應該是什麼樣的?

回答

2

怎麼樣SavingChanges事件:

public override int SaveChanges(SaveOptions options) 
{ 

    foreach (ObjectStateEntry entry in ObjectStateManager.GetObjectStateEntries(
     EntityState.Added | EntityState.Modified)) 
    { 
     //DO STUFF like create history 
    } 
    return base.SaveChanges(options); 
} 

這裏是一個頁面,這可能有助於:http://msdn.microsoft.com/en-us/library/cc716714.aspx

編輯: 後來我想,這可能有助於...

http://msdn.microsoft.com/en-us/library/bb896269.aspx

免責聲明...我沒有經驗試圖比較爲對象曲線E原單和舊值

變化跟蹤

變化跟蹤信息存儲在ObjectStateEntry對象,其通過的ObjectContext爲每個連接的對象創建的。 ObjectStateEntry對象存儲實體的以下信息:

- 確定實體身份的EntityKey。

-The EntityState爲對象

- 信息有關相關對象

-The實體集名稱

-The CurrentValues和實體的屬性OriginalValues(在加狀態的對象不具備原始值)

- 實體的修改屬性的名稱。

要了解,如果屬性的值的調用的SaveChanges,查詢>由GetModifiedProperties方法返回更改的屬性名稱的集合之間改變......

+0

謝謝,我給一個嘗試。我想知道,在這個時候,我不會添加任何歷史邏輯,只是拉什麼是緩存保存值?我想在改變之前獲得價值。 – davemackey 2010-06-30 19:19:44

+0

這是一個很好的幫助。你碰巧知道一篇文章會告訴我如何開發代碼,如果你有創建歷史記錄? – davemackey 2010-06-30 20:10:19

+0

不,我不會,但我已經做了類似的使用另一個ORM。我基本上必須創建一個類(myhistoryitem.cs)來保存我想記錄的所有舊值和新值,並引用我保留歷史記錄的記錄。然後,我會在保存事件中保存歷史記錄。 – AGoodDisplayName 2010-06-30 21:31:09