2016-09-28 25 views
1

場景A:假設在同一個SQL Server/SQL Azure實例上有多個數據庫共享完全相同的結構,其中數據庫名稱是基於約定的數據庫名稱,如db001,db002,...並且必須有一個RESTier服務能夠爲每個REST調用尋址正確的數據庫,具體取決於要在請求頭或URI路徑或查詢字符串上提供的某些特徵。如何讓一個RESTier 0.6.0服務根據請求選擇數據庫?

場景B:單個RESTier服務必須能夠處理web.config文件中定義的多個連接字符串,具體取決於請求上提供的某些特性。

在這兩種情況下,基本問題都是相同的,一個RESTier服務能夠處理對多個數據庫的請求,其中客戶端必須在每個請求上提交要使用的數據庫的提示,一個典型的多租戶場景。我使用RESTier版本0.6和實體集自動從一個實體框架模型公開:

public class Entities : EntityFrameworkApi<SalesEntities> { 

問題是,你會如何建議實現這種多租戶的情況?

回答

0

對於你的場景,我認爲你將有兩個DbContext,每一個連接到一個數據庫實例,那麼這樣的事情會爲你工作?

在configure方法中,我們調用MapRestierRoute兩次,每個將處理一個具有不同路由前綴的DbContext,並且當用戶發起請求時,請求URL將包含前綴並將自動路由到相關的數據庫實例。

config.MapRestierRoute>(「TrippinApi」,「api/TrippinA」,new RestierBatchHandler(server)); config.MapRestierRoute>(「TrippinApi」,「api/TrippinB」,新的RestierBatchHandler(服務器));

如果您對此有任何疑問,請讓我。

+0

不得不承認,我還沒有找到如何使用路由前綴(「TrippinA」,「TrippinB」),以能夠挑選對應的數據庫實例(比方說,「DBTrippinA」,「DBTrippinB」),所以以下兩個請求針對同一RESTier控制器上的不同數據庫: http:// myServer/api/TrippinA/Products http:// myServer/api/TrippinB/Products –

+0

對於每個DBInstance,您都應該使用代碼首先用擴展DBContext創建兩個類,每個DbContext與一個DbInstance相關。 在路由映射期間,每條路由都與一個DbContext相關。通過這種方式,我們可以製作與DbContext相關的路線。 但是請注意,這不是自動配置的,而是在應用程序啓動過程中配置的。 – Vincent

+0

這意味着我必須提前確定我願意支持的最大租戶數量(10個租戶意味着10個DbContexts意味着10個硬編碼路由),這對於我來說是多租戶方式並不合理。 –

相關問題