2011-07-29 8 views
2

WCFサービスのデータコントラクトとしてEntityクラスのオブジェクトを使用できますか?だから私はクライアント側でそれらを送ることができます。この優れた設計アプローチですか?エンティティをデータコントラクトとして使用することは可能ですか?

エンティティクラスもDTOとして使用したいので、データベースから取得したデータをクライアントに送信できます。

答えて

4

はいです。 EntityObjectエンティティを使用する場合は、デフォルトのコードジェネレータとT4テンプレートの両方に、DataContractDataMemberという属性を付けてください。 POCOを使用する場合は、これらの属性を生成するためにテンプレートを変更するか、手動でPOCOを作成する必要があります。

これらの属性を使用する必要があるのは、循環参照の問題です。デフォルトでは、EFはリレーションの両側にナビゲーションプロパティを作成します。直列化の間、フレームワークはその循環参照を知るためにいくつかのヒントを必要とします。そうでなければ、無限ループになります。エンティティに[DataContract(IsReference=true)]とマークする必要がなく、DataContract属性を使用した後は、DataMemberを使用して各シリアル化されたプロパティをマークする必要があります。

遅延ロードをオフにすることも重要です。そうしないと、シリアル化によってすべてのナビゲーションプロパティで遅延ロードがトリガーされ、遅延ロードされたすべてのエンティティで再帰的に実行されるためです。したがって、単一のオブジェクトの代わりに、すべての関係、すべての関係などを返すことができます。

+0

ありがとうLadislav Mrnka。私はあなたの答えを本当に感謝しています。これを行う方法を示すサンプル/チュートリアルがあります。 – Josh

関連する問題