簡體   English   中英

連接到多租戶應用程序的數據庫?

[英]Connecting to database for Multi-Tenant application?

我正在創建一個Multi-Tenant asp.net應用程序。

我決定在單獨的MSSQL數據庫或架構之間。

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

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

使用Linq to SQL做到這一點很容易,但是我並不是到處都使用Linq,因為表是非常動態的,並且架構經常更改。

最好的方法是什么? 我很高興看到使用模式,但是我不希望它變得非常混亂,但是我還需要執行類似的方法,但是要以某種方式模擬該用戶以使用默認模式。

我知道您可以動態更改web.config連接字符串,但是我已經嘗試過,它實際上更改了文件內容,這也刷新了應用程序池並導致了許​​多其他問題。

謝謝

如果為多個租戶設置了多個數據庫,則可以基於租戶創建連接字符串。

您可以簡單地向數據庫上下文構造函數添加一個重載,該重載接受連接字符串作為輸入:

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的連接字符串創建連接字符串模板。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM