繁体   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