簡體   English   中英

Silverlight / RIA服務/ EF-自定義對象

[英]Silverlight / RIA Services / EF - Custom Objects

我一直在網上尋找一種解決我的問題的方法,但是我沒有任何運氣。 我正在開發Silverlight商務類應用程序,並嘗試使用RIA服務。 我可以成功加載和保存實體,而沒有任何重大問題,但是在我的應用程序首次加載時,我需要加載所謂的“值列表”。

我的值列表是獨立的實體,大約5個左右,由ID(鍵)和Value組成,它們用於填充組合框和autocompletebox之類的東西。 我可以單獨查詢每個值,但是我寧願在一個查詢中一次加載所有值列表,以加快處理速度,因為每個記錄少於15條記錄。 我嘗試開發一個自定義類以返回所有這些類,看起來像這樣……

<DataContract(IsReference:=True)>
<KnownType(GetType(ValueList1Item))>
<KnownType(GetType(ValueList2Item))>
<KnownType(GetType(ValueList3Item))>
Partial Public Class ValueLists

    <DataMember()>
    Public Property ValueList1 AS List(Of ValueList1Item)

    <DataMember()>
    Public Property ValueList2 AS List(Of ValueList2Item)

    <DataMember()>
    Public Property ValueList3 AS List(Of ValueList3Item)
End Class

而且我嘗試了多種方法來實現服務方法,其中一種看起來像這樣……

Public Function GetValueLists() As ValueLists
        Dim ret As ValueLists = New ValueLists

        ret.ValueList1 = (From v1 In ObjectContext.ValueList1Items
                          Select v1).ToList

        ret.ValueList2 = (From v2 In ObjectContext.ValueList1Items
                          Select v2).ToList

        ret.ValueList3 = (From v3 In ObjectContext.ValueList3Items
                          Select v3).ToList

        Return ret
    End Function

我也嘗試過返回IQueryable(Of ValueLists)。 無論我嘗試了什么,每當我嘗試使用自定義類型時,都無法將方法公開給客戶端。 甚至有可能通過RIA Services進行此類操作,或者它尚未成熟? 我知道我過去使用WCF進行了此操作,但是顯然需要做更多的工作。

預先感謝,凱西

(對不起,我的英語不好)

我之前曾嘗試過,但實際上不起作用。 如果為ValueList1創建一個新類,它將起作用。 但是,如果您使用具有[Key]屬性的類,由於某種原因,該類不會生成(該屬性不會出現在客戶端)。 因此,一種解決方案是創建類似ReadOnlyValueList1的類並返回它:

ret.ValueList1 = (from v1 In ObjectContext.ValueList1Items
                      select new ReadOnlyValueList1()
                       {
                           Prop1 = v1.Prop1,
                           Prop2 = v1.Prop2,
                       }).ToList();

(對不起,C#代碼,可能在VB中有些不同)

無論如何,這是有道理的,因為您不希望所有EF內容(跟蹤等)僅綁定某些列表和組合。

您應該能夠做到這一點而沒有問題,但是在將對象傳遞給RIA服務客戶端時, 需要指定一個[Key],該鍵必須保證在所有類似對象之間都是唯一的。 這是由於RIA服務在客戶端上處理那些對象的緩存方式。 另外,您的ValueList1Item,ValueList2Item等需要可序列化

通過這種方式進行設置時,RIA服務將使您的服務器POCO對象成為客戶端實體對象。 您將遇到的唯一問題是,您必須手動處理所有CUD操作。 如果您要傳遞給客戶端的是只讀數據,則無需擔心。

好吧,我設法更加接近了。 將Key添加到返回對象的Id屬性至少可以使其成功編譯,但是使用提琴手查看結果,我可以看到該對象中沒有任何內容。 我猜這是目前的某種序列化問題。

我從模型生成的另一個實體類的副本構造了返回對象(dto),以確保不會丟失任何東西。 然后,我注釋掉所有更改跟蹤,以確保它不會引起任何問題。 這是課程:

<DataContract(IsReference:=True)> _
<KnownType(GetType(ValueList1Item))> _
<KnownType(GetType(ValueList2Item))> _
Partial Public Class ValueLists

#Region "Primitive Properties"

    <DataMember()> _
    <Key()> _
    Public Property Id() As Long
        Get
            Return _id
        End Get
        Set(ByVal value As Long)
            If Not Equals(_id, value) Then
                _id = value
            End If
        End Set
    End Property

    Private _id As Long



    <DataMember()> _
    Public Property ValueList1() As List(Of ValueList1Item)
        Get
            Return _valueList1
        End Get
        Set(ByVal value As List(Of ValueList1Item))
            If Not Equals(_valueList1, value) Then                
                _valueList1 = value               
            End If
        End Set
    End Property

    Private _valueList1 As List(Of ValueList1Item)



    <DataMember()> _
    Public Property ValueList2() As List(Of ValueList2Item)
        Get
            Return _valueList2
        End Get
        Set(ByVal value As List(Of ValueList2Item))
            If Not Equals(_valueList2, value) Then                
                _valueList2 = value               
            End If
        End Set
    End Property

    Private _valueList2 As List(Of ValueList2Item)

#End Region
End Class

我用來構造和返回對象的方法看起來像這樣...

    Public Function GetValueLists() As ValueLists
        Dim ret As ValueLists = New ValueLists

        ret.Id = RandomNumber(1, 100000000)

        ret.ValueList1 = (From vli1 In ObjectContext.ValueList1Items
                                 Select vli1).ToList()

        ret.ValueList2 = (From vli2 In ObjectContext.ValueList2Items
                                      Select vli2).ToList()


        Return ret
    End Function

跟蹤此方法表明它實際上運行良好。 我可以看到所有值列表項均已正確填充,它永遠不會離開服務器。 這使我相信,這是某種程度上的序列化問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM