1

如果對象未保存更改,我想更改對象的顯示。我想我可以只使用ChangeTracker.State,但如果我更改導航屬性,那不會更改爲修改。獲取自我跟蹤實體的真實狀態,包括導航屬性

例如,Contact對象包含電話,地址和電子郵件的導航屬性。如果我更改聯繫人的姓名,狀態將更改爲修改,但更改電話會使對象的狀態保持不變。

回答

1

與單個實體關聯的狀態不反映對象圖的狀態。你如何期待它應該工作?一旦圖中的任何內容發生變化,將導致設置所有實體以進行修改,因爲所有內容都以某種方式相互關聯。

您可以訂閱ObjectStateChanging更改跟蹤器的事件並收到有關圖形更改的通知。

+0

我想這是有道理的,如果我這樣想。我希望EF有某種內置的方式來判斷圖表是否有變化,但聽起來好像沒有。謝謝 – Rachel 2011-06-06 18:44:58

0

一切都在ChangeTracker中。

你需要看看:

  • 國家
  • ObjectsAddedToCollection
  • ObjectsRemovedFromCollection
  • OriginalValues

你也可能想看看ExtendedProperties如果你生成模型沒有外鍵ID,並且您在實踐中沒有重新填充政策改變STE。

+0

當更新導航屬性時,「ChangeTracker.State」不會更新。例如,如果我更新「Contact.Phones [0] .PhoneNumber」,則「Contact.ChangeTracker.State」仍然是「未修改」。我希望有一種內置的方式來使用EF – Rachel 2011-06-06 16:59:48

+0

Nope來獲取實際的對象狀態,您需要查看幾件事情。當你將STE重新定位到上下文時,這個想法是無處不在的,EF將爲你完成這項工作,並且將會看到所有這些事情。但在現實生活中,您需要決定是否通過網絡發送內容,並且要做到這一點,您需要在ChangeTracker中查看這些內容。 – 2011-06-06 17:32:59