2011-10-10 88 views
0

我擁有擁有數百萬行數據的EF(舊式edmx;不是代碼優先)之上的WCF數據服務。我將結果限制爲500行。到現在爲止還挺好!如何在WCF中提供DISTINCT功能

我想給消費者「鑽取」數據的能力。理想情況下,消費者代碼將運行類似select distinct Province from我的服務,用戶將選擇狀態,然後代碼將運行select distinct Zip where Province == p(我的業務領域是非常不同的,但希望你得到的照片!)。

很明顯,我無法獲得一切,並在客戶端運行截然不同。我如何在服務中提供這種能力?我沒有在服務中暴露EntitySet「省份」或「拉鍊」。我是否應該擴展MyEntities類,並嘗試在那裏模擬這些集?還是有一種更簡單的方法來公開其他集合,除了從Entity Framework自動公開的集合呢?

我希望這個問題是有道理的......

更新:我想我造成的混亂,當我提到我使用WCF服務。我實際上正在使用WCF 數據嘗試通過實體框架4.1提供OData包裝的服務。希望這可以澄清這個問題...

+0

爲什麼你需要在這裏運行DISCTINCT?蹩腳的數據庫設計?讓我們更多地理解這個問題,但像Procinve一樣,Zip可能會讓你的服務器性能明智,當你用一個獨特的方式運行它們很多次。 – TomTom

+0

在後端,它甚至不是關係數據庫,而是統計抽樣。所以,在服務器端選擇distinct是非常快的(如果我正確理解SAS內部,它在「省」分區,並在分區內的「Zip」索引)。所以,我期望表現令人滿意。無論如何 - 用戶需要查看可用的省份/拉鍊,並在Zip中獲得結果 - 所以我的第一個問題是功能,而不是性能。 – Felix

+0

如果perforamnce開始發臭,你總是可以緩存;) – TomTom

回答

0

你有沒有考慮過放棄你所謂的propietary interactfce和去標準?

從.NET公開ODATA很容易,並且允許用戶向下鑽取。 THEN所需要的只是一些轉換,以暴露像Province或Zip之類的元素,就像在一個理智的數據模型中那樣;然後你去;)

OData的好處在於,它允許您輕鬆地將LINQ傳遞到後端, (讓我從客戶名稱以「a」開始的所有客戶推出),並且不一定與強制實體打交道。

+0

也許我們有一些誤解,但我怎麼做*不* ODATA和*不*標準?我看到(並遵循)的所有OData示例都說「創建新項目 - WCF數據服務」。這裏的專有是什麼?你說「退出[e]很容易從.NET公開ODATA,並且允許用戶鑽取」。這正是我想要做的!你能指出一個例子嗎? – Felix

+0

OData作爲WCF數據服務(許多人之一)公開的示例:http://msdn.microsoft.com/en-us/data/video/gg601462 – Felix

相關問題