2010-08-30 52 views
0

我使用DataServiceContext加載一些實體的預測(實體有很多特性,最大限度地減少交通我只加載這些特性,這是需要的時刻)是這樣的:WCF數據服務和預測。如何從實體投影實例獲取實體URI?

from x in ctx.Portfolios 
     select new 
     { 
     Id = x.Id, 
     Name = x.Name, 
     PortfolioName = x.PortfolioName, 
     Description = x.Description, 
     ValidFrom = x.ValidFrom, 
     ValidUntil = x.ValidUntil 
     }; 

我需要的是一個有效的要加載它以查看詳細信息的實體的URI。我試過使用ctx.TryGetUri(obj,out uri),但它總是返回null(可能是因爲非跟蹤投影,但是,我已經加載了PK屬性(Id),所以它肯定不是這種情況)。

現在的問題是,我如何確定底層數據實體的URI,有PK的投影對象?

回答

1

在C#中,匿名類型是使用不可設置的屬性生成的(屬性沒有setter)。因此,WCF數據服務客戶端無法跟蹤這些(因爲它沒有任何意義,它無法在實現期間覆蓋屬性值)。所以結果是實例沒有被跟蹤。 要解決這個問題,只需聲明一個非匿名類,並使用您需要的屬性並將其投影到該類中(確保屬性可設置)。 請注意,VB的匿名類型具有可設置的屬性,因此它們將被跟蹤。

+0

我不需要設置加載屬性。我只需要獲得適當的實體URI來將其完整版本(而不是投影)加載到其他數據上下文中進行編輯。 – 2010-11-25 15:47:42

+0

如果您只對URI感興趣,則不要投射任何東西,只需選擇整個實體,然後使用DataServiceContext.GetEntityDescriptor()獲取實體的描述符,您可以在其中找到存儲SelfLink和EditLink屬性的實體指向該實體的URI(第一個用於閱讀,第二個用於編輯)。 – 2010-11-26 07:56:35

+0

我需要投影來加載業務實體的輕量級列表以顯示在用戶界面上。當用戶雙擊選定的投影時,我需要加載一個完整的(200列)實體。 – 2010-11-27 12:10:17