2010-06-26 2 views
0

Мне всегда казалось, что я понял, как это работает ... но в последнее время я начал действительно использовать интерфейсы, и теперь все не так, как я ожидаю.Передача объектов методам

с использованием сущности framework, у меня есть служба для каждого объекта, который отвечает за взаимодействие с базой данных и т. Д. ... на моей одной службе. Я передаю коллекцию объектов моей службе как icollection (of 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 имеет правильные состояния changetracking. Но как только он перешел к srv.savechanges, он возвращается к неизмененному. Я уверен, что его что-то глупое мне не хватает ... вся вещь EF может меня смущать ...

ответ

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 
0

Вам необходимо приложить до, который вы изменяете.

Смежные вопросы