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

Конечный класс

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

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

1 ответ

Решение

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

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 ("контекст"),
  • Затем мне пришлось добавить объект аудита в истории в настоящих AppEntities ("контекст").
  • Наконец, мне пришлось сообщить контексту ("AppsEntities"), чтобы сохранить изменения в базе данных (перестать просто держать его в облаке EF).
Другие вопросы по тегам