WCFサービスのデータコントラクトとしてEntityクラスのオブジェクトを使用できますか?だから私はクライアント側でそれらを送ることができます。この優れた設計アプローチですか?エンティティをデータコントラクトとして使用することは可能ですか?
エンティティクラスもDTOとして使用したいので、データベースから取得したデータをクライアントに送信できます。
WCFサービスのデータコントラクトとしてEntityクラスのオブジェクトを使用できますか?だから私はクライアント側でそれらを送ることができます。この優れた設計アプローチですか?エンティティをデータコントラクトとして使用することは可能ですか?
エンティティクラスもDTOとして使用したいので、データベースから取得したデータをクライアントに送信できます。
はいです。 EntityObject
エンティティを使用する場合は、デフォルトのコードジェネレータとT4テンプレートの両方に、DataContract
とDataMember
という属性を付けてください。 POCOを使用する場合は、これらの属性を生成するためにテンプレートを変更するか、手動でPOCOを作成する必要があります。
これらの属性を使用する必要があるのは、循環参照の問題です。デフォルトでは、EFはリレーションの両側にナビゲーションプロパティを作成します。直列化の間、フレームワークはその循環参照を知るためにいくつかのヒントを必要とします。そうでなければ、無限ループになります。エンティティに[DataContract(IsReference=true)]
とマークする必要がなく、DataContract
属性を使用した後は、DataMember
を使用して各シリアル化されたプロパティをマークする必要があります。
遅延ロードをオフにすることも重要です。そうしないと、シリアル化によってすべてのナビゲーションプロパティで遅延ロードがトリガーされ、遅延ロードされたすべてのエンティティで再帰的に実行されるためです。したがって、単一のオブジェクトの代わりに、すべての関係、すべての関係などを返すことができます。
ありがとうLadislav Mrnka。私はあなたの答えを本当に感謝しています。これを行う方法を示すサンプル/チュートリアルがあります。 – Josh