7

VS 2008 & .NET 3.5 SP1 の使用:

WCF を使用して、Entity Framework を使用してデータベース エントリを読み書きするサービスにクライアントが接続できるようにしています。デフォルトでは、データベースから自動的に生成されるエンティティには DataContract 属性が適用されます。

残念ながら、公開されているフィールドの多くは、クライアントが使用するためのものではなく (つまり、誰がどのデータにアクセスしているかなどの記録)、セキュリティ上の理由から、それらを公開しないようにしたいと考えています。Entity Framework クラスがこの方法で公開されないようにする方法はありますか?

: これは、 「.NET エンティティのプライベート プロパティがサービス経由でパブリックとして公開されるのを防ぐにはどうすればよいですか?」の複製ではありません. その質問では、ユーザーは特定のフィールドを選択的に表示したいと考えていますが、エンティティが DataContract としてまったく公開されないようにしたいと考えています。

前もって感謝します。

4

3 に答える 3

3

DataContract オブジェクトには個別のクラスを使用します。1 つのメソッド ToContract() を持つインターフェイスがあり、すべてのエンティティはこのインターフェイスを部分クラス ファイルで実装します。これは余分な作業で定型文ですが、必要な分離と制御の粒度を実現する最も簡単な方法のようです。

于 2009-07-13T21:05:39.360 に答える
2

基本的に、あなたができることは2つあります。

  1. これらの項目の [DataMember] 属性を手動で削除して、DataContract から公開したくない項目を削除します。その場合、WCF はプロパティをシリアル化しません。
  2. 必要なメンバーだけを使用して独自の WCF DataContract クラスを定義し、たとえばAutoMapperなどを使用して EF エンティティから WCF DataContract に変換するロジックを考え出し、その間の面倒な代入操作を排除 (または少なくとも制限) します。 EF および WCF エンティティ。

マルク

于 2009-07-13T21:16:46.593 に答える