2016-08-27 59 views
3

我有一個包含集合的分離對象。我使用這個代碼如何使用EF Core內部的集合更新分離的對象?

EntityEntry dbEntityEntry = _context.Entry<T>(entity); 
dbEntityEntry.State = EntityState.Modified; 

分離對象保存完美,如果我改變大多數領域的..問題是一個集合這個對象有安裝它。集合上的更改不會持久。我已經看到查詢被執行,並且觸及「主」表。所有從屬關係不更新

有什麼辦法可以爲分離的對象更新整個樹嗎?

+0

我認爲你需要明確地設置依賴關係的狀態。 – Developer

回答

3

問題:

EF不知道的改變collection或有關navigation properties。通過該dbEntityEntry的狀態設置爲EntityState.Modified,EF只知道對象dbEntityEntry已經改變。這意味着EF將只更新dbEntityEntry,但不會更新爲navigation properties

解決方案:

可以遍歷當前dbEntityEntry的所有collection (or navigation properties)和實體狀態設置爲EntityState.Modified

另一種解決方案:請看看也可以幫到你。

Working with Self-Tracking Entities

+1

你的答案有很大的意義,但它是一個痛苦的屁股遍歷整個對象樹,當它很深:( – StackOverflower

+0

是的,這是真的。我也提出了另一個解決方案。請參閱。 – Sampath

0

我可以建議我在一些框架中的方式。因爲實體更新有很多問題,所以如果使用ASP。之前更新只是調用這個方法

protected virtual void AttachIfNot(TEntity entity) 
    { 
     if (!_dbSet.Local.Contains(entity)) 
     { 
      _dbSet.Attach(entity); 
     } 
    } 

對於導航性能,只是在收集迭代做同樣的方式。