2016-05-03 3 views
1

В моей функции переопределения для функции Entity Frameworks SaveChanges() Я пытаюсь сериализовать исходный объект и измененный объект, однако мне трудно найти, что такое тип объекта что я могу передать его как параметр объекту XmlSerializer.Получить тип объекта из Entity Framework ObjectStateEntry

Public Overrides Function SaveChanges() As Integer 
    ChangeTracker.DetectChanges() 

    Dim ctx As ObjectContext = DirectCast(Me, IObjectContextAdapter).ObjectContext 
    Dim objectStateEntryList As List(Of ObjectStateEntry) = ctx.ObjectStateManager. 
     GetObjectStateEntries(EntityState.Added Or EntityState.Modified Or EntityState.Deleted).ToList() 

    For Each Entry As ObjectStateEntry In objectStateEntryList 
     If Not Entry.IsRelationship Then 
      Dim objectType As String = Entry.Entity.GetType.Name.Split("_").First 
      Select Case Entry.State 
       Case EntityState.Modified 
        For Each propertyName As String In Entry.GetModifiedProperties() 
         Dim ser As New XmlSerializer(Entry.Entity.GetType) 
         Dim sw As New IO.StringWriter 
         ser.Serialize(sw, Entry.OriginalValues) 
         Dim serializedObject As String = sw.ToString 
        Next 
      End Select 

     End If 
    Next 

    Return MyBase.SaveChanges() 
End Function 

Я попытался вышесказанное, но не помогло.

ответ

0

Попробуйте

Dim originalType = ObjectContext.GetObjectType(Entry.Entity.GetType()) 

GetObjectType статический метод.

Тогда просто преобразовать объект сущности к новому типу

Dim convertedEntity = Convert.ChangeType(Entry.Entity, originalType) 

Convert.ChangeType также является статическим, хранящимся в системе.

+0

Perfect, спасибо. Как расширение этого, как получить исходный объект и новый объект в формате, который я могу сериализовать? –

+0

@JacobMason Я отредактировал ответ. – user2216

+0

Я получаю «Объект должен реализовать IConvertible». –