2015-09-22 182 views
1

我正在創建一個多租戶asp.net應用程序。連接到多租戶應用程序的數據庫?

我決定在單獨的MSSQL數據庫或模式之間。

但是,我無法找到有關如何動態更改數據庫(理想情況下)或用戶帳戶的任何信息,具體取決於用戶應連接到哪個帳戶。

我很可能有一個基本表,它定義了用戶應該連接到哪個數據庫。

這樣做使用Linq to SQL很容易,但我並沒有在任何地方使用Linq,因爲這些表格非常動態,而且架構就像經常更改一樣。

這樣做的最好方法是什麼?我很高興看到使用Schema,但我不希望它變得非常混亂,但我也需要採取類似的方法,但以某種方式以相同的方式模擬該用戶來拾取默認架構。

我知道你可以動態地改變web.config連接字符串,但我已經試過了,它在物理上改變了文件內容,這也刷新了應用程序池,並導致我很多其他問題。

感謝

+0

正如你所寫,你的問題是基於觀點和廣泛的:關於堆棧溢出的主題。你能縮小到一個你不知道該怎麼做的特定技術嗎? –

回答

2

如果已經設置了多個數據庫,多個租戶,您可以根據租戶創建連接字符串。

可以過載只需添加到您的數據庫上下文構造接受連接字符串輸入:

public partial class SampleDbEntities 
{ 
    public SampleDbEntities(string connectionString) 
     : base(connectionString) 
    { 
    } 
} 

那麼無論你需要創建你的數據庫方面的實例,用這個過載,並注入合適usernamepassword根據您的租戶檢測策略在連接字符串中。

例如,當您的連接字符串看起來是這樣的:

var connectionTemplate = 
    @"metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;" + 
    @"provider=System.Data.SqlClient;" + 
    @"provider connection string=""data source={0};" + 
    @"initial catalog={1};" + 
    @"persist security info=True;" + 
    @"user id={2};" + 
    @"password={3};" + 
    @"MultipleActiveResultSets=True;App=EntityFramework"""; 

string connection = string.Format(connectionTemplate, 
    @"(localdb)\v11.0", @"TestDB", @"user1" , @"password1"); 

var db = new SampleDbEntities(connection); 

注:

  • 基於這是你的web.config連接字符串創建連接字符串模板。
相關問題