2010-06-26 15 views
0

J'ai toujours pensé que je comprenais comment cela fonctionnait ... mais dernièrement j'ai commencé à vraiment utiliser des interfaces et maintenant les choses ne sont plus ce à quoi je m'attends. En utilisant le framework d'entité, j'ai un service pour chaque objet qui est responsable de l'interaction avec la base de données et ainsi de suite .... sur mon seul service je passe la collection d'objets à mon service en tant qu'icollection (de contactinfo) avant que je passe l'objet, le changetraker a les bons états. Cependant, dans ma méthode, ce n'est pas le cas et tous les états ne sont pas modifiés.Passer des objets à des méthodes

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 

Comme je l'ai dit au-dessus du Me.contacInfoCollection a le droit des États changetracking. Mais une fois qu'il est passé à srv.savechanges, il revient à non modifié. Je suis sûr que c'est quelque chose de stupide qui me manque ... toute la chose EF peut être source de confusion pour moi ...

Répondre

0

En fait, ce n'est pas possible compte tenu de la façon dont j'utilise les services pour mes opérations de données.

c'est la façon dont je l'ai obtenu à travailler:

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 
0

Vous devez attacher avant vous modifiez.

Questions connexes