2016-05-03 22 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

完璧、よろしくお願いいたします。その延長として、元のオブジェクトと新しいオブジェクトをシリアル化できる形式で取得するにはどうすればよいですか? –

+0

@JacobMason私は答えを編集しました。 – user2216

+0

私は "オブジェクトはIConvertibleを実装する必要があります。" –

関連する問題