EFコードファーストコンテキストで使用しているPOCOオブジェクトがいくつかあります。したがって、データを入力するときは、POCO自体ではなく、実際にはEFプロキシオブジェクトを処理しています。
クライアントアプリケーションで使用するPOCOオブジェクトを返すASP.NETMVC4ApiControllerがあります。
私の「GET」メソッドは次のようになります。
// GET api/Clients/5
public Client GetClient(int id)
{
Client client = db.Clients.Find(id);
if (client == null)
{
throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound));
}
return client;
}
シリアライザーがClientオブジェクトをシリアル化しようとすると、実際にはEFプロキシバージョンを処理しているため、実際には機能しません。これにより、問題が発生します。ApiControllerが他のオブジェクトのコレクションとともにオブジェクトを返すことができますか?を参照してください。
だから、私はこれを自分に行うことでプロキシ生成をオフにすることができますDbContext
:
db.Configuration.ProxyCreationEnabled = false;
これにより、プロキシではなくPOCOを処理していることが保証されます。ただし、クライアントクラスのメンバーのほとんどは、遅延読み込みを行っていたEFプロキシであったため、入力されていません。
したがって、私が本当に望んでいるのは、EFプロキシクラスを使用してデータを取得し、最後にメソッドから元のPOCOを返すことです。
コードでオブジェクト全体(ネストされたオブジェクトを含む)を最初から手動で作成せずに、これを行うにはどうすればよいですか?確かに簡単な方法があるはずです-または少なくともある種のヘルパークラス?