【发布时间】:2012-01-25 09:53:57
【问题描述】:
我有一个带有用于编辑某些对象的表单的网页。这个对象包含一个像这样定义的其他对象的集合:
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 循环或先将要删除的对象添加到其他列表来克服这个问题,但我希望也许有一种模式可以让我的代码更好。
提前感谢所有建议。
【问题讨论】:
标签: vb.net entity-framework-4.1