2016-09-23 96 views
0

儘管已經找到了解決方案,但在這裏發佈,因此如果任何人有同樣的問題,人們可以找到它。爲什麼實體框架似乎更新了不變的實體

實體框架似乎更新只通過導航屬性鏈接到實際更改的實體的屬性,這讓我很困惑。

一個類似的例子澄清:讓我們來訂購3公斤的糖。該訂單有一個ID,一個金額,一個產品ID以及一個虛擬產品(糖),還有一個客戶ID可以讓它成爲一個虛擬客戶。在保存訂單的同時,客戶和產品也在數據庫中得到更新。

我在試圖找到像「爲什麼導航屬性設置爲已修改」,「爲什麼不更新的子實體更新太多」等問題的答案。

+0

EF只會更新時,它在上下文跟蹤實體設置爲'EntityState.Modified',可能包括您用於保存/更新的代碼將會解決您的問題? – Wurd

回答

0

徹底的調試表明,實際的原因是我在同一個控制器動作中的不同點上使用類 - 例如,我很想發送關於通過電子郵件發送訂單的通知,所以我調用帶有DTO(數據傳輸對象)發出的郵件的相關信息,有些看起來像這樣一個郵件動作:

public class MailDTO { 
    public Order order { get; set; } 
    public Customer customer { get; set; } 
    public Product product { get; set; } 
} 

由於實際的客戶實體有大量的信息,該郵件並不需要,我創建了一個新的Customer對象,並將相關信息放入該DTO中。這就是問題所在 - 客戶實體正在被框架跟蹤,所以當我調用savechanges(異步)函數時,框架也試圖將其寫入數據庫。

希望這有助於別人不要浪費時間尋找在錯誤的地方錯誤;)