2011-01-25 14 views
2

私はWCFを初めて使いました。私のWebプロジェクトには、エンティティコンテナ名JobSystemEntitiesを持つADO.NETエンティティデータモデル(別名EF edmx)があります。oData WCFサービス - 要素を非表示

私はJobSystemEntitiesを使用して、簡単なODATA WCFデータサービスを作成しました、そして、それは素晴らしい作品:

public class JobService : DataService<JobSystemEntities> 
{ 
    public static void InitializeService(DataServiceConfiguration config) 
    { 
     config.SetEntitySetAccessRule("Jobs", EntitySetRights.ReadSingle); 
    } 

はしかし、これは仕事上のすべてのプロパティを公開します。私は、機密データ、つまりジョブテーブルのコストフィールド/プロパティ/列を非表示にしたいと考えています。

+0

EFモデルでその属性を非表示にするのが最も簡単です(例:それを使用してはいけません。これを行うことができますか?または、ODataサービス用にカスタムEFモデルを作成し、そのカスタムモデルの「ジョブ」エンティティからその属性を非表示にできますか? –

+0

ウェブサイトのコストフィールドを使用するので、EFモデルにする必要があります。 oDataサービス用の2番目のEFモデルを作成する提案もありますが、これを行う別の方法がないのは驚きです。 –

答えて

2

私はこれを投稿していますが、遅いですが、他の人に役立つかもしれません。

クラスでIgnoreProperties属性http://msdn.microsoft.com/en-us/library/system.data.services.ignorepropertiesattribute.aspxを使用できます。

これを行うには、部分ジョブクラスを定義する必要があります。

namespace DAL.Entities 
{ 
    [IgnoreProperties("Cost")] 
    public partial class Job 
    { 

    } 
} 
+0

これはデータレイヤーとしてEntity Frameworkで動作しないと思います。あなたが他のものを持っているなら、うまくいくはずです。 – Vaccano

+0

私は最近、プロジェクトで自分自身を使っていましたが、Entity Frameworkでうまく動作しました。 –

+1

私にとってはうまくいかなかったとき、私はこの質問をしました:http://stackoverflow.com/questions/6600037/add-ignoredatamemeber-to-specific-properties-in-a-generated-partial-class POCOテンプレートでは機能しません。 (しかし、それは普通のEFのために働くかもしれません。) – Vaccano

0

私はこれに類似したことをしました。良い出発点はここに発見された:

http://weblogs.asp.net/rajbk/archive/2010/05/15/pre-filtering-and-shaping-odata-feeds-using-wcf-data-services-and-the-entity-framework-part-1.aspx

基本的には、他のプロパティとしてリンクされている別のエンティティにエンティティの保護されたプロパティを分離する必要があります。いったんこれを行うと、保護されたエンティティをいつ見ることができるかを制限するQuery Interceptorがユーザに行われます。

[QueryInterceptor("YourObjectsProtectedProperties")] 
public Expression<Func<YourObjectsProtectedProperties, bool>> OnReadYourObjectsProtectedProperties() 
{ 
if (ShowEntityToUser()) 
    return o => true == true; 
return o => true == false; 
} 
関連する問題