【问题标题】:How to limit the fields returned from Silverlight 4 RIA services query如何限制从 Silverlight 4 RIA 服务查询返回的字段
【发布时间】:2011-04-28 02:53:24
【问题描述】:

我在 Silverlight 4 中使用 RIA 服务,并希望限制从服务返回的字段。例如:

TableA:
  ID
  Field1
  Field2
  Field3

TableB:
  ID
  TableAID (foreign key)
  Field1
  RestrictedField2

在我的域服务类中,我在创建服务时生成了类似的内容。我添加了包含(工作正常):

<RequiresAuthentication()>
Public Function GetTableA() As IQueryable(Of TableA)
    Return Me.ObjectContext.TableA.Include("TableB")
End Function

我的问题是,如何在不返回 RestrictedField2 的情况下从 TableA 获取所有列并从 TableB 获取 Field1?我很确定这是通过一些 Linq 的幻想来完成的,但我不太确定如何。

谢谢! 马特

更新

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

【问题讨论】:

标签: silverlight-4.0 entity-framework-4 wcf-ria-services


【解决方案1】:

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

http://social.msdn.microsoft.com/Forums/en/adodotnetentityframework/thread/ab7b251a-ded0-487e-97a9-

看来您可以返回一个匿名类型,然后将其转换为您需要的类型。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 视图是一种方法,但另一种方法是简单地创建一个封装您要返回的数据的 ViewModel 类。
    • @Nissan Fan:这并不能解决我的问题,因为受限信息仍会通过服务传递给 ViewModel。任何拥有 HTTP 嗅探器(Fiddler)的人都可以通过查看数据来获取数据。更好的是,他们可以创建自己的客户端代理并直接调用服务。我需要防止这些类型的情况发生。
    • 实际上,ViewModel 是您定义的具体类,它只包含您想要/需要的信息。作为 Silverlight 客户端调用的结果,您将从 Invoke 方法或 RIA 中的 Get 返回它。
    • @Nissan Fan:啊,明白了,我以为您将 ViewModel 放在客户端。您提出的建议与更改“模型”(即添加视图)没有太大不同,因此我认为这是相同类型的解决方案。
    • 一个 View 或者一个 ViewModel 就足够了; ViewModel 方法确实具有额外的优势,您不必现在或将来在需求发生变化时对数据库进行更改。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多