将对象传递给方法

时间:2010-06-26 14:56:57

标签: vb.net entity-framework

我一直以为我理解这是如何工作的...但最近我开始真正使用接口,现在事情并没有做我期待的事情。

使用实体框架,我为每个负责与数据库交互的对象提供服务....在我的一个服务上我将对象集合作为icollection(contactinfo)传递给我的服务我传递了对象,变换者有正确的状态。但是在我的方法中,情况并非如此,并且所有状态都设置为未修改。

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的东西可能会让我感到困惑......

2 个答案:

答案 0 :(得分:0)

您需要在修改之前附上

答案 1 :(得分:0)

实际上,根据我为数据操作使用服务的方式,这是不可能的。

这是我开始工作的方式:

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