2012-08-14 61 views
3

我想讀取EntityObject內的更改以包含在報表中。檢測實體框架上更改的屬性EntityObject

例如:

名稱: 之前之後

地點: 之前

後是否有一個通用的方法來做到這一點?我使用默認的實體類生成(而不是POCO)的EF4。

這些實體將被附加,因此應該跟蹤它們的變化。我看不到通過IEntityWithChangeTracker界面做到這一點的方法。

遍歷導航屬性會很好,但它只是一個勝利,只是報告改變的原始屬性。

回答

8

您可以檢索ObjectStateEntry爲您的實體和檢查內容CurrentValuesOriginalValues。試試這個(未經測試):

ObjectStateEntry entry = objectContext.ObjectStateManager.GetObjectStateEntry(entity); 
foreach (string property in entry.GetModifiedProperties()) { 
    object oldValue = entry.OriginalValues[property]; 
    object newValue = entry.CurrentValues[property]; 
} 

這不會處理導航性能,我不知道它將如何與複雜的工種。

+0

剛剛在一些'string'屬性上測試了這個,它起到了很大的作用。我確實有一些複雜的類型和導航屬性,所以如果我找到有用的東西,我會稍後嘗試一下並在這裏發佈。非常感謝拉迪斯拉夫。 – 2012-08-14 14:14:11

+0

@Ladislav如何使用EF6和DbContext實現這一點?順便說一句 - 你的句柄打破了評論框上的自動完成。 – 2014-11-12 09:32:18

1

除了Ladislav Mrnka的建議:不是真的通用,但至少有一個可能解決方案:Code Generation and T4 Text Templates。這允許您在生成模型時將自己的自定義邏輯添加到每個實體。

就你而言,你可以實現所需的遍歷功能來檢查導航屬性。

+0

T4模板在這裏完全是值得一提的,但在我的情況下,至少似乎使用現有的API就足夠了,並且通常更簡單/更安全。 – 2012-08-14 15:16:10

相關問題