Asp.Net Core 2.2更改当前用户的数据库运行时

时间:2019-06-14 12:35:56

标签: c# entity-framework asp.net-core database-connection dbcontext

我有一个使用EF Core的ASP.NET Core 2.2项目,该项目由多个客户使用。每个客户都有自己的数据库,这些数据库具有由IRepository管理的完全相同的架构(动态加载的DBset)。这是多个子域项目,我想登录到account.example.com上的用户,经过身份验证的用户将重定向到网站B,并由Cookie身份验证授权。

网站A,网址为www.example.com

网站B,位于site.example.com-(我的应用程序)

网站C,位于account.example.com-(ASP.NET身份-.Net Core 2.2)

public MydbContext(string dbName)
        { 
            this.Database.GetDbConnection().ChangeDatabase(dbName);

        }

但是它获得了默认连接字符串,该字符串已添加到startup.cs类的ConfigureServices中。如何使用Session从 HttpContext.User 中的Cookie存储当前用户的连接字符串,并更改每个查询的DBContext连接字符串。

1 个答案:

答案 0 :(得分:0)

您可以将连接字符串传递给构造函数并使用它。 EF Core中的模式如下所示:

public class Db : DbContext
{
    readonly string connectionString;

    public Db(string connectionString)
    {
        this.connectionString = connectionString;
    }
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer(connectionString);
        base.OnConfiguring(optionsBuilder);
    }