我想讀取EntityObject
內的更改以包含在報表中。檢測實體框架上更改的屬性EntityObject
例如:
名稱:
之前之後地點:
之前
後是否有一個通用的方法來做到這一點?我使用默認的實體類生成(而不是POCO)的EF4。
這些實體將被附加,因此應該跟蹤它們的變化。我看不到通過IEntityWithChangeTracker
界面做到這一點的方法。
遍歷導航屬性會很好,但它只是一個勝利,只是報告改變的原始屬性。
我想讀取EntityObject
內的更改以包含在報表中。檢測實體框架上更改的屬性EntityObject
例如:
名稱:
之前之後地點:
之前
後是否有一個通用的方法來做到這一點?我使用默認的實體類生成(而不是POCO)的EF4。
這些實體將被附加,因此應該跟蹤它們的變化。我看不到通過IEntityWithChangeTracker
界面做到這一點的方法。
遍歷導航屬性會很好,但它只是一個勝利,只是報告改變的原始屬性。
您可以檢索ObjectStateEntry
爲您的實體和檢查內容CurrentValues
和OriginalValues
。試試這個(未經測試):
ObjectStateEntry entry = objectContext.ObjectStateManager.GetObjectStateEntry(entity);
foreach (string property in entry.GetModifiedProperties()) {
object oldValue = entry.OriginalValues[property];
object newValue = entry.CurrentValues[property];
}
這不會處理導航性能,我不知道它將如何與複雜的工種。
除了Ladislav Mrnka的建議:不是真的通用,但至少有一個可能解決方案:Code Generation and T4 Text Templates。這允許您在生成模型時將自己的自定義邏輯添加到每個實體。
就你而言,你可以實現所需的遍歷功能來檢查導航屬性。
T4模板在這裏完全是值得一提的,但在我的情況下,至少似乎使用現有的API就足夠了,並且通常更簡單/更安全。 – 2012-08-14 15:16:10
剛剛在一些'string'屬性上測試了這個,它起到了很大的作用。我確實有一些複雜的類型和導航屬性,所以如果我找到有用的東西,我會稍後嘗試一下並在這裏發佈。非常感謝拉迪斯拉夫。 – 2012-08-14 14:14:11
@Ladislav如何使用EF6和DbContext實現這一點?順便說一句 - 你的句柄打破了評論框上的自動完成。 – 2014-11-12 09:32:18