先日、ASP.NETのWCFサービスでEntityFrameworkのDbContext経由で取得したモデルクラスのオブジェクトを返そうとして、壁にぶつかった。発生したエラーの内容はこんな感じ。host.上記のエラーはWCFサービスの呼び出し側で表示されるエラーなので実際に起こっているエラーの原因はちょっと違う部分にある。デバッグに苦労したけれど、とりあえずどうやらWCFサービス内でオブジェクトを返すためにシリアライズしようとしている所でエラーが起きているらしい、という事が分かった。原因は、DbContextの動作原理としてPOCOに対する変更追跡と遅延ローディングを実現するために内部的に「動的プロキシクラス」というものを生成している事にあるらしい。動的に生成されたプロキシクラスはシリアライズ対象に出来る「既知のクラス」として認識されないのでエラーになってしまう様だ。プロキシを直接、シリアル化または逆シリアル化できません。既知の型のみのシリアル化または逆シリアル化ができますが、プロキシ型は既知の型ではないためです。false;の1行をDbContextクラスのコンストラクタ内に入れる事で解決した。これでデータ取得時に動的プロキシが作成されずに純粋なPOCOが返って来るので、シリアライズ時に問題が発生しなくなる。型にマップ」する方法が載っている。試してみたところ上手く行かなかったので今回はパスした。Framework)他の解決策として、動的プロキシの作成を抑止せずにWCFサービスでオブジェクトを返す前に手動でPOCOにデータを詰め替えるという方法もある。falseにするという解決策を取りたくない場合はそちらでも良いかも知れない。