2012-06-21 31 views
2

我是WCF數據服務的新手。我有一個非常簡單的數據模型。它的一些屬性具有相同的類型,就像這樣:wcf數據服務 - 在數據模型中公開同一類型的屬性

public IQueryable<IntegerSum> HouseholdGoodsSums 
{ 
    get 
    { 
     return GetData<IntegerSum>(DefaultProgramID, "rHouseholdGoodsPrice", IntegerSumConverter); 
    } 
} 

public IQueryable<IntegerSum> StructureSums 
{ 
    get 
    { 
     return GetData<IntegerSum>(DefaultProgramID, "rStructurePrice", IntegerSumConverter); 
    } 
} 

的IntegerSum是一個非常非常簡單的類:

[DataServiceKey("Amount")] 
public class IntegerSum 
{ 
    public int Amount { get; set; } 
} 

當我瀏覽到我的服務在Web瀏覽器中,我看到下面的錯誤消息:

服務器在處理請求時遇到錯誤。異常消息是'Property'HouseholdGoodsSums'和'StructureSums'是類型爲'IntegrationServices.PropertyIntegrationServices.IntegerSum'和'IntegrationServices.PropertyIntegrationServices.IntegerSum'的IQueryable,而類型'IntegrationServices.PropertyIntegrationServices.IntegerSum'是類型爲'IntegrationServices.PropertyIntegrationServices .IntegerSum」。請確保每個類型層次結構只有一個IQueryable屬性。'。

當我擺脫這兩個屬性之一時,服務開始工作。

我在谷歌搜索這個錯誤消息,但還沒有找到解決方案。 真的不允許在數據模型中擁有兩個相同類型的屬性嗎?如果是這樣,爲什麼?

回答

2

同志,

要首先解決的錯誤,您正在運行到在Reflection提供商的限制。具體而言,反射提供程序不支持MEST

也就是說,有更好的方法來實現你想要達到的目標。你可能不應該使IntegerSum成爲一個實體類型(一個實體類型是一個唯一可識別的實體,它不適合你的場景)。雖然您無法直接公開該內容,但可以將其公開爲service operation。這似乎更接近你想要達到的目標。

幾種方式之間的事是否不應該是一個實體來區分:

  1. 如果它有一個鍵已經如在數據庫中的PK,這也許應該是一個實體型
  2. 如果你需要創建/更新/刪除獨立的對象,它必須是一個實體類型

HTH, 馬克

+0

感謝您的回答。現在我明白我做錯了方式。我現在要做的就是公開兩個返回整數集合的服務操作(用WebGetAttribute標記)。 –

+0

雙倍感謝,正是我所需要的 – Evan

相關問題