質問:
動的プロキシを処理するときに、それらをシリアル化する必要があるときに、基盤となるPOCOを引き出すことは可能ですか?
理論的根拠:
DbContext
EF Code Firstを使用してPOCOエンティティをシリアル化(XML)する必要がありますが、POCOの動的プロキシが作成され、シリアル化が困難であることがすぐにわかりました。
私は以下を試しました:
- でプロキシの作成を無効にし
DbContext
、純粋なPOCOでのみ機能します。これにより、インスタンスを好きなようにシリアル化できます。唯一の欠点は、ナビゲーションプロパティが追跡されていないことです。したがって、保存するときに関連するすべてのエンティティを手動でアタッチする必要があります。そうしないと、新しいエンティティが常に作成されます(コード例を参照)。 ISerializable
POCOにインターフェースを実装して、シリアル化を手動で処理します。これは多くの作業であり、持続可能な解決策ではありません。
コード例。
// Attach and update tags
foreach (var tag in entity.Tags)
{
Context.Entry(tag).State = Context.Tags.Any(t => t.ID == tag.ID)
? EntityState.Modified
: EntityState.Added;
}
// Attach and update state.
Context.Entry(entity).State = Context.Resources.Any(x => x.ID == entity.ID)
? EntityState.Modified
: EntityState.Added;
ご想像のとおり、私のエンティティがより多くの関係を持っていると、複雑さが手に負えなくなる可能性があります。