2015-09-22 151 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连接字符串创建连接字符串模板。
相关问题