将对象传递给方法
问题描述:
我一直以为我明白这是如何工作的......但最近我已经开始真正使用接口,现在事情并没有做我期待的事情。使用实体框架,我有一个负责与数据库进行交互的每个对象的服务,例如...在我的一个服务上,我将对象的集合作为icollection(contactinfo)传递给我的服务,在我传递对象之前,changetraker具有正确的状态。但是在我的方法中,情况并非如此,所有状态都设置为未修改状态。将对象传递给方法
Private Sub SaveExecute(ByVal param As Object)
Dim srv As Services.ContactInfoService = GetService(Of Services.IContactInfoService)()
If srv.SaveChanges(Me.ContactInfoCollection) Then
GetEvent(Of Events.EditCompletedEvent(Of ICollection(Of Model.ContactInfo))).Publish(Me.ContactInfoCollection)
End If
End Sub
Public Function SaveChanges(ByVal con As ICollection(Of ContactInfo)) As Boolean Implements IContactInfoService.SaveChanges
Using _context As New referee2Entities
For i As Integer = 0 To con.Count - 1
_context.ContactInfoes.Attach(con(i))
Next
_context.DetectChanges()
If _context.SaveChanges() > 0 Then
Return True
EnableNavigation()
End If
Return False
End Using
' Return Save()
End Function
如上所述,Me.contacInfoCollection具有正确的更改跟踪状态。但一旦它传递给srv.savechanges它将恢复为未修改。我相信它的东西很愚蠢,我错过了......整个EF事情可能会让我感到困惑......
答
其实这是不可能的,因为我为我的数据操作使用服务的方式。
这是我得到它的工作方式:
Public Function Update(ByVal con As ObservableCollection(Of ContactInfo)) As Boolean Implements IContactInfoService.Update
Using _context As New referee2Entities
Dim entry As ObjectStateEntry
For Each c As ContactInfo In con
If c.ID = 0 Then
_context.ContactInfoes.AddObject(c)
Else
_context.ContactInfoes.Attach(c)
entry = _context.ObjectStateManager.GetObjectStateEntry(c)
entry.ChangeState(EntityState.Modified)
entry.ApplyCurrentValues(c)
End If
Next
Return Save(_context)
End Using
End Function
答
您需要在之前附加您修改。