2011-09-04 19 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