我有一個Visual Studio 2010生成的POCO類集合(剛剛從DB架構生成的POCO模板)。對於給定的用例,我讓用戶加載一個實體(一個CRM聯繫人)並採取行動 - 添加電話號碼(本身是一個與外鍵相關的獨立實體)和地址(也是一個單獨的實體)等。回發我將修改後的實體存儲在ViewState中(我不想立即將更改保存到數據庫中)。當用戶點擊保存按鈕時會出現問題。主CRM聯繫人將被保存正常(檢測並保存任何更改),但沒有任何相關屬性會被保存 - 無論是新添加項還是修改後的EF都會忽略它。實體框架中的POCO與快照更改檢測
如何強制Entity Framework檢測到我的相關屬性發生了更改?我使用這個救我的主要聯繫人:
//contact is an instance of CRMContact retrieved from ViewState
if (contact.Id == 0) {
CRMEntities.CRMContacts.AddObject(contact);
} else {
CRMContact orig = CRMEntities.CRMContacts.Where(c => c.Id == contact.Id).FirstOrDefault();
CRMEntities.CRMContacts.ApplyCurrentValues(contact);
}
CRMEntities.SaveChanges(SaveOptions.DetectChangesBeforeSave | SaveOptions.AcceptAllChangesAfterSave);
也能正常工作聯繫人實體,但不是我相關的人。我需要添加什麼來添加和/或更新電話號碼和電子郵件?
請注意,我不想使用基於代理的更改跟蹤。
謝謝
我試着循環遍歷我的導航屬性,並在每個單獨的'AddObject'或'ApplyCurrentValues'上執行操作,但是,在這個代碼中,我得到了'保存更改時'具有相同鍵的項目已經被添加'異常,所以我想我的問題是如何正確**在這種情況下創建一個「保存」功能 – 2010-03-03 18:53:32
並且對應用程序各個位置的導航屬性進行了更改 - 我發佈的內容只是我的「保存」方法的一部分 - 毫無疑問,需要檢測的變化 – 2010-03-03 18:56:41
然後,您應該顯示該代碼。我能看到的只是迄今爲止發佈的內容;我無法用我從未見過的代碼診斷問題。嘗試將問題簡化爲簡單的測試用例。 – 2010-03-03 19:37:37