代码之家  ›  专栏  ›  技术社区  ›  ecathell

将对象传递给方法

  •  0
  • ecathell  · 技术社区  · 14 年前

    我一直以为我明白这是怎么回事…但最近我开始真正使用接口,现在事情没有做我所期望的。

    使用实体框架,我为负责与数据库交互的每个对象提供了一个服务,例如……在我的一个服务上,我将对象集合作为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
    

    2 回复  |  直到 12 年前
        1
  •  0
  •   Craig Stuntz    14 年前

    你需要附加 你可以修改。

        2
  •  0
  •   ecathell    14 年前

    这就是我让它工作的方式:

    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