2011-04-28 47 views
1

我在Silverlight 4中使用RIA服務並希望限制從服務返回的字段。例如:如何限制從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 

我的問題是,我如何得到所有從表A列的,也得到表B字段1,而不返回RestrictedField2?我很確定這是通過Linq的一些幻想完成的,但我不太確定。

謝謝! 馬特

更新

一個要求,我沒有上面所列內容。由於RestrictedField1中的數據不能被髮送到客戶端,所以在服務器端必須刪除列的。另外,我需要在不同的域服務方法中使用此域(使用RequiresRoleAttribute保護),以便我可以將信息公開給管理員。這個要求意味着我不想創建一個不同的複雜類型並返回它。我寧願繼續使用EF模型類型。

+0

我也在Silverlight論壇上轉貼了這個問題,並在下面的回覆中收到了類似的回覆:http://forums.silverlight.net/forums/p/227614/551503.aspx#551503 – 2011-05-02 16:41:51

回答

0

根據我發現的一些信息,完成我所需要的最好方法是在數據庫中創建一個視圖並通過EF和RIA Services公開所需的數據。這似乎是最好的解決方案。

+0

視圖是一種方法去,但另一個將是簡單地創建一個ViewModel類封裝您想要返回的數據。 – 2011-05-01 16:27:59

+0

@Nissan Fan:這並不能解決我的問題,因爲受限制的信息仍然會通過ViewModel的服務。任何擁有HTTP嗅探器(Fiddler)的人都可以通過查看這些數據來獲取數據。更好的是,他們可以創建自己的客戶端代理並直接調用服務。我需要防止這些類型的情況。 – 2011-05-02 14:20:57

+0

實際上,ViewModel是一個你定義的具體類,它只包含你想要/需要的信息。作爲Silverlight客戶端調用的結果,您將從Invoke方法或RIA Get中返回。 – 2011-05-02 16:34:08