0

Вот мой код:Entity Framework: сохранить объект?

Partial Public Class AppsEntities 
Private Sub OnContextCreated() 
    AddHandler Me.SavingChanges, AddressOf context_SavingChanges 
End Sub 
Private Shared Sub context_SavingChanges(ByVal sender As Object, ByVal e As EventArgs) 
    For Each entry As ObjectStateEntry In DirectCast(sender, ObjectContext).ObjectStateManager.GetObjectStateEntries(EntityState.Modified) 
     If Not entry.IsRelationship And entry.Entity IsNot Nothing Then 
      For Each propName As String In entry.GetModifiedProperties() 
       Dim audit As New History 
       audit.action = "Changed information in " & propName & " to " & entry.CurrentValues(propName) & " from " & entry.OriginalValues(propName) 
       audit.action_by = "dmackey" 
       audit.action_date = Date.Now 
       audit.extension_id = entry.CurrentValues.GetValue(1) 
      Next 

     End If 


    Next 
End Sub 

End Class

Как сохранить этот новый объект, который я создал? В LINQ я хотел бы сделать что-то вроде:

datasource.object.insertonsubmit(audit) 
datasource.SubmitChanges() 

ответ

0

Вот мой окончательный код:

Partial Public Class AppsEntities 
Private Sub OnContextCreated() 
    AddHandler Me.SavingChanges, AddressOf context_SavingChanges 
End Sub 
Private Shared Sub context_SavingChanges(ByVal sender As Object, ByVal e As EventArgs) 
    For Each entry As ObjectStateEntry In DirectCast(sender, ObjectContext).ObjectStateManager.GetObjectStateEntries(EntityState.Modified) 
     If Not entry.IsRelationship And entry.Entity IsNot Nothing Then 
      For Each propName As String In entry.GetModifiedProperties() 
       Dim context As New AppsEntities() 
       Dim audit As New History 
       audit.action_note = "Changed information in " & propName & " to " & entry.CurrentValues(propName) & " from " & entry.OriginalValues(propName) 
       audit.action_by = "dmackey" 
       audit.action_date = Date.Now 
       audit.extension_id = entry.CurrentValues.GetValue(0) 
       context.AddToHistories(audit) 
       context.SaveChanges() 
      Next 

     End If 

    Next 
End Sub 

End Class 

По сути, то, что я должен был сделать:

  • определяют в моей ForEach новый экземпляр AppsEntities («context»),
  • Затем мне пришлось добавить объект аудита к истории в настоящих AppEntities («context»).
  • Наконец, мне пришлось указать контекст («AppsEntities»), чтобы сохранить изменения в базе данных (просто удерживайте его в облаке EF).
+2

Работает ли это для вас? Вы можете получить (дождитесь его ...) * переполнение стека * с помощью этого кода. У вас есть обработчик SavingChanges, который вызывает SaveChanges(). Ну, вызов SaveChanges() вызывает событие SavingChanges, которое вызовет ваш обработчик, который вызовет SaveChanges(), который будет ... переполнением стека. Просто позвоните в SaveChanges(). Это должно быть сделано с вашего сайта. –

+0

Он не добавляет его, если у меня нет контекста.SaveChanges() там. Это работает для меня вот так. Я предполагаю, возможно, что Me.SavingChanges отличается от экземпляра, чем context.SaveChanges? – davemackey

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