2012-09-19 117 views
0

我已更新項目以使用VS2012附帶的新Entity Framework。但是,我遇到了一些問題,其中我的代碼拋出異常。實體框架5不更新兩個實體中的導航屬性

VS2010版本的Entity Framework,我能夠創建或修改Entity,並呼籲SaveChanges()

例如之前使用其導航性能:具有發票的集合客戶的 導航屬性。

Client c = new Client(); 
Invoice I = new Invoice(); 
c.Invoices.Add(I); 

然後,我會能夠在我的代碼實際上是在保存沒有問題在什麼地方使用Invoice.Client。現在Invoice.Client == null

同樣,在設置I.Client = CI下不C.Invoices

顯示缺少什麼我在這裏或者這只是簡單的如何Entity Framework 5是什麼?

編輯

VS2010,我創建了一個新的項目,添加相同DataSource和下面的代碼和預期一樣:

Client C = new Client(); 
C.Name = "Test"; 
Invoice I = new Invoice(); 
C.Invoices.Add(I); 
MessageBox.Show(I.Client.Name); 

難道在VS2012並沒有骰子同樣的事情。

回答

0

在你的上面的例子中,你實際上並沒有附加到上下文中。

返回引用的EF僅通過其運行作爲DetectChanges而這又被觸發(你的情況)IDbSet <>。新增()

如果修改的結果,這個過程被稱爲填充調整信息的代碼添加到客戶端的背景下添加發票之前,你應該看到預期的行爲

編輯:

我還沒有真正使用這一功能與DB第一(的.edmx),但你可以啓用它通過在2010年使用以下模型類型。

該型號在2012年已作爲STEs have been deprecated被刪除。 (雖然我的理解是,他們仍然是向後兼容的工作,所以,如果你是一個項目從2010 - 2012年的升級,你依然可以使用該模型)

Self Tracking Entities

+0

盧克嗨,按我上面的編輯,2010年的代碼正常工作,但相同的代碼和數據源不在2012年。將項目添加到上下文中沒有任何區別 – Taylor

+0

@Taylor檢查您是否有自我跟蹤實體,這是替代EF跟蹤圖。自我跟蹤實體創建一個代理實體,該實體覆蓋了可以在set上執行修正的屬性。如果您在舊版本中啓用了此功能,但不是您的新功能,這可以解釋行爲 –

+0

感謝盧克,這是我從未遇到過的情況,自我跟蹤實體如何啓用? – Taylor