2012-03-16 64 views
3

我使用Include屬性上我的屬性時,他們回到正確地傳送到客戶端,但一旦我把它送回了RIA服務進行進一步處理的財產是現在爲空。利雅服務:包括實體返回null回服務

internal sealed class lSyncMetadata 
{  
    private lSyncMetadata() 
    { 
    } 

    public string ConflictMessage { get; set; } 

    public DateTime DateInserted { get; set; } 

    public Guid vValueId { get; set; } 
    [Key] 
    public Guid ID { get; set; } 

    public bool IsConflict { get; set; } 

    public bool IsReadyToSync { get; set; } 

    public Guid SyncSet { get; set; } 
    [Include] 
    public vValue vValue { get; set; }  
} 
+0

你是否在對象上下文中調用了Include? – 2012-03-16 08:16:57

+0

沒有在客戶端創建lSync對象,所以是vValue,當我將lSync的實例傳遞給我的ria服務以保存對象時,vValue爲null。 – arcbound08 2012-03-16 08:21:52

+0

vValue是一個新對象嗎?如果沒有,RIA只會將vValueId發送到服務器,因爲它不需要整個對象。 – Leo 2012-03-16 09:39:45

回答

1

RIA服務客戶端不序列除了值類型和字符串的任何財產,因爲通常的導航屬性可能會導致循環引用,這將是無法確定送什麼,什麼不發送。此外,爲了減少網絡流量併爲了保持適當的變更跟蹤,ChangeSets由RIA服務提交,但僅限於其正在跟蹤的實體。

RIA服務旨在複製客戶端的實體跟蹤,並且您需要更新,按需獲取導航屬性(相關實體),並且您應該讓RIA服務管理要發送的內容以及不發送的內容。

但是包括從服務器到客戶端才能正常運行,它不會從客戶端工作,服務器,事實上,如果你更改導航屬性,RIA Services將確定並正確地發送變更。

對於從這樣的東西分開,你必須創建一個普通的WCF服務或Web服務,使這項工作並獲得來自客戶端。

複雜類型只包含值類型的支持,但它們不能是具有實體鍵的實體類型。

+0

是不是值類型的事情,因爲利雅V1 SP1改變。它支持複雜對象類型的序列或者我誤解了你的答案? – Silvermind 2012-03-16 23:46:06

+0

謝謝,我所做的只是創建了一個複雜的對象,並在我的lSync中嵌入了vValue的屬性,而不是具有vValue實例的lSync。 – arcbound08 2012-03-17 06:52:42