2010-06-26 194 views
0

我一直以爲我明白這是如何工作的......但最近我已經開始真正使用接口,現在事情並沒有做我期待的事情。使用實體框架,我有一個負責與數據庫進行交互的每個對象的服務,例如...在我的一個服務上,我將對象的集合作爲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事情可能會讓我感到困惑......

回答

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

您需要在之前附加您修改。