2011-11-30 36 views
0

我創建使用WCF數據服務和Entity Framework 4.1的代碼首先服務。我有一個要求基於uri段做一些過濾。基本上,我們有一個多租戶數據庫,並且需要將租戶id的字符串表示作爲uri的一部分進行傳遞。例如,一個URI會是這個樣子:WCF數據服務與自定義過濾器

http://myservice.com/client123/Users 

Client123將被用來創建上下文過濾以只該客戶端的數據。

我被指向OData示例代碼的方向http://www.odata.org/developers/odata-sdk我看到的代碼中正在創建和使用sessionid緩存默認數據(我也添加了會話管理的邏輯)。然而,它是用DSPContext等方式完成的,似乎很多情況下不需要基於實體框架的實現。 (至少我的理解是,如果你使用實體框架,創建自定義上下文不應該被要求。)

有沒有人知道使用基於標準實體框架的數據源來做這種實現的好例子?或者,您可否告訴我如何修改現有的sdk代碼?我主要停留在元數據創建(這甚至需要?)和資源創建。

最好的問候,並在此先感謝!

+0

我真的堅持了這一點。我也嘗試通過註冊一個serviceroute來實現這條路線。問題在於佔位符在服務路線中似乎不受支持。 請幫忙! :-D – RockyMountainHigh

回答

0

如果您使用基於EF服務,而該服務將永遠看起來是一樣的,無論客戶端ID,那麼你不需要任何花哨的自定義提供。只是使用的伎倆從SDK,以獲得正確的客戶ID,露出一個「正常」的基礎EF WCF服務DS,並在DataService.CreateDataSource清除使用客戶端ID創建客戶端正確的EF上下文。

+0

感謝您的快速響應。然後,我會做一個uritemplate匹配來提取id並傳遞它?我認爲(知道)我錯過了一些顯而易見的東西。 – RockyMountainHigh

+0

在您的重寫CreateDataSource你需要以某種方式獲得客戶端ID。有幾種方法(取決於你確切的主機)。一種方法是檢查請求URI並從那裏獲取。另一個可能是SDK示例在會話中使用的技巧。 –

+0

我能夠通過使用uriteplate並獲取邊界參數來獲得所需的內容。但是,我仍然得到了client123找不到的資源。 – RockyMountainHigh