2011-08-03 212 views
2

我想創建使用實體框架的WCF數據服務項目。 (我對這兩個都是新手)。wcf數據服務與實體框架

我使用數據庫創建實體。 現在,我創建了服務操作,它返回IQueryable<entity>

我的問題是

  1. 我不想回整組列在實體。我不能將它們從實體中刪除,因爲它不爲空。如何避免這些?

  2. 我有幾個FK列,我需要表中的其他列詳細信息。如何包含來自其他表的列?

  3. 爲什麼無法使用POCO類從WCF數據服務返回?

  4. 如何格式化響應;即增加一些更多的細節,如頁碼等響應,更改xml標籤,刪除一些細節,如「鏈接rel」?

我已經嘗試了很多東西來實現1和2.但最後我意識到我只能使用實體,因爲它是使它的工作。

我不知道約4.

任何意見,將不勝感激。

回答

1

1.我不想返回整個實體中的一組列。
2.我有幾個FK列,我需要 表的其他列詳細信息。

爲此,您應該定義一個新的類,以匹配您需要的/您希望客戶看到的內容。這可以是一個直接的POCO課程 - 沒有特殊要求。爲每個實體組裝該類,省去不需要的列,並將FK列的額外字段抓取到新類中。直接返回IQueryable<YourNewClass>而不是實體類。

爲了避免巨大的左派賦值語句來填充新類的屬性,您應該看看AutoMapper,這使得可以很容易地在各個彼此非常相似的類中進行復制(例如,丟失或添加一些屬性)。

4.如何格式化響應;即向頁面號等 響應添加更多的細節,更改xml標記,刪除像「鏈接rel」這樣的一些細節 ?

這是不可能的 - OData協議非常嚴格的定義發生了什麼事情是在消息中,哪些鏈接有等,如果你不能忍受的 - 你必須推出自己的WCF REST服務並完全放棄WCF數據服務。

如果您想更徹底地調查該路線,請查看WCF REST Developer Center on MSDN

更新:該鏈接似乎已經死了 - 嘗試WCF Web Http Programming Overview而不是。

+0

我做你的建議爲點1和2,我得到錯誤「服務器遇到任何一個異常消息是'On data context type'GamesContext',有一個頂級的IQueryable屬性'Games',其元素類型不是實體類型,請確保IQueryable屬性是實體類型或指定IgnoreProperties屬性上的數據上下文類型忽略此屬性'。查看服務器日誌以獲取更多詳細信息。異常堆棧跟蹤是:「跟隨此:http://msdn.microsoft.com/en-us/gg601461 – genericuser

+0

@ Priya10:似乎是一個[有幾個解決方法的已知問題](http://samuelmueller.com/2009/11/working-with-projections-and-dtos-in-wcf-data-services/) - 希望這可能會幫助你! –

+0

@marc_s該鏈接似乎已經死了,我得到那個錯誤 – Maslow

0

確保您有一個Id屬性或您指定[Key][DataServiceKey("Your_Custom_ID_Property")] 對於我整理出了這問題