我有一個用於編輯某個對象的表單的網頁。這個對象包含了這樣的定義的其他對象的集合:更新實體框架中POCO的子集合(添加/更新/刪除)4.1
Public Overridable Property Employees As List(Of Employee)
在一個形式,我可以刪除僱員,添加一個新的或修改現有的一個。當我點擊保存時,新的值被髮送到服務器。在服務器上,我檢查用戶是否存在。如果存在,那麼我修改它的值,如果它不存在,那麼我添加它。所有存在於服務器上且未發送的員工都被標記爲已刪除(狀態已更改爲EntityState.Deleted)。我嘗試使用下面的代碼(dbCollection =數據庫實體,從形式發送newCollection =集合):
For Each item In dbCollection
Dim dbItem = item
Dim newTask = newCollection.FirstOrDefault(Function(i) i.Id = dbItem.Id)
If newTask Is Nothing Then
Me.Entry(item).State = EntityState.Deleted
Else
Me.Entry(item).CurrentValues.SetValues(newTask)
newCollection.Remove(newTask)
End If
Next
For Each item In newCollection
dbCollection.Add(item)
Next
Me.SaveChanges()
此代碼不起作用,因爲改變到EntityState.Deleted去除收集的對象,併爲每個循環休息,因爲集合被修改...
我知道我可以克服這個問題,通過使用for循環或添加對象首先刪除其他列表,但我希望也許有一個模式,將使我的代碼更好。
在此先感謝您的所有建議。
這是一個簡單而且可行的解決我的問題的方法。它是你的還是你在某處看到過的?我會等一會兒,看看是否有人在這裏發佈答案。如果不是,我會接受你的。 –
@MichalB:我經常使用它。你會在很多例子中看到這個,這是解決「收集已被修改」問題的標準解決方案。這不是我的發明。 – Slauma