[英]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)
{
}
}
然后,無論何時需要創建數據庫上下文的實例,都可以使用此重載,並根據租戶檢測策略在連接字符串中注入適當的username
和password
。
例如,當您的連接字符串如下所示:
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.