Silverlight 4.0 如何限制Silverlight 4 RIA服务查询返回的字段

Silverlight 4.0 如何限制Silverlight 4 RIA服务查询返回的字段,silverlight-4.0,entity-framework-4,wcf-ria-services,Silverlight 4.0,Entity Framework 4,Wcf Ria Services,我将RIA服务与Silverlight 4一起使用,并希望限制从该服务返回的字段。例如: TableA: ID Field1 Field2 Field3 TableB: ID TableAID (foreign key) Field1 RestrictedField2 在我的域服务类中,我在创建服务时生成了类似的内容。我添加了以下内容(工作正常): 公共函数GetTableA()作为IQueryable(表A的) Return Me.ObjectContex

我将RIA服务与Silverlight 4一起使用,并希望限制从该服务返回的字段。例如:

TableA:
  ID
  Field1
  Field2
  Field3

TableB:
  ID
  TableAID (foreign key)
  Field1
  RestrictedField2
在我的域服务类中,我在创建服务时生成了类似的内容。我添加了以下内容(工作正常):


公共函数GetTableA()作为IQueryable(表A的)
Return Me.ObjectContext.TableA.Include(“TableB”)
端函数
我的问题是,如何在不返回RestrictedField2的情况下从表A中获取所有列并从表B中获取Field1?我很确定这是通过林克的一些幻想来实现的,但我不太确定如何实现

谢谢! 马特

更新


上面我没有列出一个要求。必须在服务器端删除列,因为RestrictedField1中的数据无法发送到客户端。此外,我还需要在不同的域服务方法(受RequiresRoleAttribute保护)中使用此字段,以便向管理员公开信息。这个要求意味着我不想创建一个不同的复杂类型并返回它。我更愿意继续使用EF模型类型。

根据我找到的一些信息,实现我所需的最好方法是在数据库中创建一个视图,并通过EF和RIA服务公开我所需的数据。这似乎是最好的解决方案。

根据我找到的一些信息,实现我所需的最好方法是在数据库中创建一个视图,并通过EF和RIA服务公开我所需的数据。这似乎是可用的最佳解决方案。

检查此链接,我认为它可以解决您的问题,而无需视图模型


我认为您可以返回一个匿名类型,然后将其转换为所需类型。

检查此链接,我认为它可以解决您的问题,而不需要视图模型


我认为您可以返回一个匿名类型,然后将其转换为所需的类型。

视图是一种方法,但另一种方法是创建一个ViewModel类,该类封装您要返回的数据。@Nissan Fan:这并不能解决我的问题,因为受限信息仍然会通过服务传递到ViewModel。任何拥有HTTP嗅探器(Fiddler)的人都可以通过查看这些数据来获取数据。更好的是,他们可以创建自己的客户端代理并直接调用服务。事实上,ViewModel是您定义的一个具体类,它只包含您想要/需要的信息。Silverlight客户端调用后,您将从Invoke方法或Get-in RIA返回该结果。@Nissan Fan:啊,明白了,我想您是在客户端放置ViewModel。你所提出的与改变“模型”(即添加视图)没有什么不同,所以我会认为是同一种类型的解决方案。ViewModel方法的另一个优点是,如果需求发生变化,您现在或将来都不必对数据库进行更改,但另一种方法是简单地创建一个ViewModel类,该类封装您想要返回的数据。@Nissan Fan:这并不能解决我的问题,因为受限信息仍然会通过服务传递到ViewModel。任何拥有HTTP嗅探器(Fiddler)的人都可以通过查看这些数据来获取数据。更好的是,他们可以创建自己的客户端代理并直接调用服务。事实上,ViewModel是您定义的一个具体类,它只包含您想要/需要的信息。Silverlight客户端调用后,您将从Invoke方法或Get-in RIA返回该结果。@Nissan Fan:啊,明白了,我想您是在客户端放置ViewModel。你所提出的与改变“模型”(即添加视图)没有什么不同,所以我会认为是同一种类型的解决方案。ViewModel方法的另一个优点是,如果需求发生变化,您现在或将来都不必在数据库中进行更改。我也在Silverlight论坛上转发了这个问题,并收到了与我以下回答类似的回复:我也在Silverlight论坛上转发了这个问题,并收到了类似的回复我的答复如下:
<RequiresAuthentication()>
Public Function GetTableA() As IQueryable(Of TableA)
    Return Me.ObjectContext.TableA.Include("TableB")
End Function