質問: VS 2008および.NET 3.5 SP1を使用している場合 クライアントがEntity Frameworkを使用してデータベースエントリを読み書きするサービスに接続できるようにするために、WCFを使用しています。デフォルトでは、データベースから自動的に生成されたエンティティにはDataContract属性が適用されています。 残念ながら、公開されているフィールドの多くはクライアントによる消費(つまり、誰がどのデータにアクセスしているかの記録など)を意図したものではありません。 Entity Frameworkクラスがこの方法で公開されないようにする方法はありますか? ***注*** :これは.NETエンティティのプライベートプロパティがサービスを介してパブリックとして公開されるのを防ぐ方法の複製ではありませんか。 。その質問では、ユーザーは特定のフィールドを選択的に表示することを望みますが、私はエンティティがDataContractとしてまったく公開されないことを望みます。 前もって感謝します。
回答: あなたのエンティティはデータベースと1対1で対応する必要がないことを知っていますか?特に、関連性のない列やテーブル全体を除外することができます。 エンティティモデルは概念モデルであることを意図しています。 1つのクライアントセット(Webサービスなど)に公開するためのエンティティセットと、同じデータベースにマッピングする別のセット(異なるクライアント(Webアプリケーションなど)用)を簡単に作成できます。 一方、Webサービスを通じてEntity Frameworkのオブジェクトを公開しないことを常にお勧めします。 Microsoftは残念ながら[DataMember]のマークを付けて実装依存のプロパティを公開しています。私は今、AdventureWorksからSalesOrderHeaderを返す単純なサービスでこれを試しました。私のクライアントは、次のEFタイプのプロキシバージョンを受け取りました。 * EntityKeyMember * StructuralObject * EntityObject * EntityKey * EntityReference * 関連終了 これらはあなたのクライアントが知る必要があるものではありません。 データ転送オブジェクトを公開し、プロパティを一方から他方にコピーすることをお勧めします。明らかに、これは手作業によるよりもリフレクションまたはコード生成を通して行われる方が良いです。私は過去にコード生成を通してそれをやった(T4テンプレート)。 私が試したことがないオプションはAutoMapperです。