2016-03-12 33 views
1

我需要構建一個多租戶應用程序。該代碼是完全共享的每家公司,但每家公司都有自己的數據庫。具有多個數據庫和泛型的實體框架多租戶體系結構

每家公司都通過Web API通過他們自己的'API Key'訪問應用程序。此密鑰用於在主數據庫的「GlobalCompanies」表中查找公司特定的配置詳細信息,該表包含公司特定的詳細信息,包括數據庫詳細信息和完整的連接字符串。

我建立一個新客戶的目標是簡單地運行一些腳本來創建一個新的數據庫,並用新的數據庫詳細信息更新這個'GlobalCompanies'表,並且所有的東西都能正常工作!

因此,web.config文件中沒有配置信息,除了可能包含配置詳細信息的主數據庫。

流將因此會:

  1. 瀏覽器調用Web API方法,並傳遞API密鑰
  2. 應用程序使用API​​密鑰,並確定正在使用數據庫
  3. Application使用共同的代碼,而是適用數據庫操作到公司特定的數據庫。

我發現這篇文章Repository Pattern with Entity Framework 4.1 and Code First這給了我一個瞭解泛型的存儲庫模式,但我不確定我會如何動態地創建和使用不同的DBContexts? (如果即使這是正確的方法)?

我已經使用不同的連接字符串與ADO.net完成了這一點,但理想情況下我想利用實體框架和泛型。

難道有人請指點我正確的方向嗎?我找不到這個架構的任何具體例子。

回答

1

EF與您使用ADO.Net所做的一樣。您只需將不同的連接字符串傳遞給上下文的構造函數即可。 (沒有參數的默認構造函數將從配置文件中獲取連接字符串。)上下文不會關心連接字符串的來源 - 配置文件,master數據庫,由調用代碼構造 - 它只會使用它。

當然,如果連接字符串格式不正確,或者指向一個不包含預期表的db,那麼會出現問題。但我相信你會期待這一點。

+0

哇。我應該只看構造函數...我現在有另一個問題,我不能傳遞連接字符串到存儲庫(通過構造函數),然後在上下文構造函數中進一步使用它。我收到錯誤「字段初始值設定程序無法引用非靜態字段,方法或屬性...」,我可以理解(查看後),但我無法理解如何解決該問題。 – ChrisCurrie

+0

我認爲您最好的選擇是發佈一個新問題,在錯誤發生的位置顯示您的代碼,以便我們有機會了解它在做什麼。 (很高興答案幫助!) –

+0

當然應該 – ChrisCurrie

相關問題