2017-07-26 73 views
0

所以我明白,在Entity Framework中,您可以將實體附加到當前上下文,並且它將以未更改的EntityState開始。我也從那一點開始改變那個實體的單個屬性會導致實體框架只更新被更改的那些屬性而不是每個屬性。然而,我想知道如果我們連接一個實體會發生什麼,然後立即將它設置爲等於該實體類型的新實例。 EF會將整個實體標記爲骯髒(EntityState.Modified)還是隻會更新已更改的屬性?EF:將實體附加到上下文並分配給同一個實體的新實例

+0

你爲什麼不試試? –

+0

我不知道如何在調試器中檢查實體狀態。我也可以做。 –

+0

我只是設置該條目等於一個變量,並設置一個斷點? –

回答

0

因此,在我的問題,做我所提到的將進入狀態更改爲Detached不會更新保存。如果要通過將實體設置爲等於另一個對象來修改實體,則必須使用數據上下文的.Entry方法來跟蹤該實體。代碼如下所示:

//We query local context first to see if it's there. 
var attachedEntity = db.Carts.Local.Find(newCart.Id); 

//We have it in the context, need to update. 
if (attachedEntity != null) { 
    var attachedEntry = _context.Entry(attachedEntity); 
    attachedEntry.CurrentValues.SetValues(newCart); 
} 

您可以找到完整的示例here。您可以在頁面底部找到它作爲最後一個代碼示例。該示例經過優化,僅更新可以更改的屬性。

然而,使用這個有幾個缺點。其中之一是,到目前爲止,實體框架不支持使用.CurrentValues.SetValues()更新導航屬性(相關實體)。這也僅適用於當前正在跟蹤要更新的實體。所以你可能需要再次調用數據庫來更新它。

相關問題