首页 > 解决方案 > asp.net core 如何在运行时从实体框架更改连接字符串(登录后)

问题描述

我有一个 .NET Core 3.0 Web 应用程序。登录成功后,我想在运行时更改连接字符串。

标签: asp.net-coremodel-view-controller.net-core

解决方案


IMO,您无法在运行时更改services.AddDbContext<T>。解决方法是在成功登录时添加一个DBContextFactory以创建新的 dbcontext 对象。

参考以下步骤:

1.创建一个DBContextFactory.cs

public static class DbContextFactory
{
    public static Dictionary<string, string> ConnectionStrings { get; set; }

    public static void SetConnectionString(Dictionary<string, string> connStrs)
    {
        ConnectionStrings = connStrs;
    }

    public static ApplicationDbContext Create(string connid)
    {
        if (!string.IsNullOrEmpty(connid))
        {
            var connStr = ConnectionStrings[connid];
            var optionsBuilder = new DbContextOptionsBuilder<ApplicationDbContext>();
            optionsBuilder.UseSqlServer(connStr);
            return new ApplicationDbContext(optionsBuilder.Options);
        }
        else
        {
            throw new ArgumentNullException("ConnectionId");
        }
    }
}

2.启动时初始化DbContextFactoryConfigure

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        Dictionary<string, string> connStrs = new Dictionary<string, string>();
        connStrs.Add("DB1", "Your connection string 1");
        connStrs.Add("DB2", "Your connection string 2");
        DbContextFactory.SetConnectionString(connStrs);
        //other middlewares
    }

3.使用

if(status)
{
   var dbContext = DbContextFactory.Create("DB2");//get the dbcontext with connection string 2
}

推荐阅读