2011-09-04 50 views
1

我在我的模型中定義了一個名爲SessionsOverview的實體。我喜歡下面的代碼揭露它通過WCF服務:希望覆蓋WCF中爲EntityType數據返回的內容

public static void InitializeService(DataServiceConfiguration config) 
{ 
    // Examples: 
    config.SetEntitySetAccessRule("*", EntitySetRights.AllRead); 
    config.SetServiceOperationAccessRule("*", ServiceOperationRights.AllRead); 
    config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2; 
} 

它在一個叫做ModelSessionView.Designer.cs

在代碼文件創建一串代碼,它目前有一個名爲SessionsOverviews方法返回一個。網絡對象。我想重寫基於某些安全規則返回的內容。具體來說,我想看看我的app.config,獲取設置,如果該設置不正確,我想隱藏該對象中的一些數據。我可以開始更新這個文件,但這似乎是錯誤的。有沒有一個明確的地方我應該添加這樣的邏輯?

感謝

/// <summary> 
    /// No Metadata Documentation available. 
    /// </summary> 
    public ObjectSet<SessionsOverview> SessionsOverviews 
    { 
     get 
     { 
      if ((_SessionsOverviews == null)) 
      { 
       _SessionsOverviews = 
        base.CreateObjectSet<SessionsOverview>("SessionsOverviews"); 
      } 
      return _SessionsOverviews; 
     } 
    } 
+0

人下面的文章有什麼想法?我的問題沒有任何意義嗎? –

回答

0

您是否嘗試過使用QueryInterceptor的?

這些獲得服務類的指定,並返回一個表達式,你可以寫自己。

一個簡單的例子是如下定義的:

[QueryInterceptor("SessionsOverviews")] 
public Expression<Func<SessionsOverview, bool>> SessionsOverviewFilter() 
{ 
    var configValue = readfromconfig; 

    if (configValue == "something") 
    { 
     return (session) => session.thePropertyToFilteron == configValue; 
    } 

    return (session) => true; 
} 

此外,還可以指定ChangeInterceptors。

詳細內容見

http://msdn.microsoft.com/en-us/library/dd744842.aspx

+0

是否可以更改數據?我得到的表達式樹可能不包含賦值運算符錯誤。 – Eatdoku

+0

否攔截器返回的數據必須是要返回的類型。在上面的例子中,表達式樹將被改變爲對最終查詢應用where限制。像SessionsOverview.thePropertyToFilteron =='foo'的地方。答案中有一個錯字,appologies。它應該是==而不是=。 – SCB

+0

不確定它是否有意義,但是如果在發送它之前操作查詢結果(相同類型但改變數據)。這個邏輯應該在哪裏實施?傾向於擁有一個強大的類型對象。 thx – Eatdoku