場景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> {
問題是,你會如何建議實現這種多租戶的情況?
不得不承認,我還沒有找到如何使用路由前綴(「TrippinA」,「TrippinB」),以能夠挑選對應的數據庫實例(比方說,「DBTrippinA」,「DBTrippinB」),所以以下兩個請求針對同一RESTier控制器上的不同數據庫: http:// myServer/api/TrippinA/Products http:// myServer/api/TrippinB/Products –
對於每個DBInstance,您都應該使用代碼首先用擴展DBContext創建兩個類,每個DbContext與一個DbInstance相關。 在路由映射期間,每條路由都與一個DbContext相關。通過這種方式,我們可以製作與DbContext相關的路線。 但是請注意,這不是自動配置的,而是在應用程序啓動過程中配置的。 – Vincent
這意味着我必須提前確定我願意支持的最大租戶數量(10個租戶意味着10個DbContexts意味着10個硬編碼路由),這對於我來說是多租戶方式並不合理。 –