asp.net-core - asp.net core 如何在运行时从实体框架更改连接字符串(登录后)
问题描述
我有一个 .NET Core 3.0 Web 应用程序。登录成功后,我想在运行时更改连接字符串。
解决方案
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
}
推荐阅读
- python - 如何使用 Deepface 从图像中获取嵌入向量?
- javascript - 我如何只获得一个唯一值(注释)来播放 - 不重复 Javascript
- python - 在python中计算俄罗斯方块ai的间隙
- javascript - MongoDB - 数组的 $addToSet?
- rest - TDengine使用RestfulPreparedStatement,无参数导致NullPointerException
- ruby-on-rails - 如何以 Ruby / Rails 方式更新 kwargs?
- node.js - Node + Redis + WebSocket + RabbitMQ 通知服务
- google-signin - 我们能否以编程方式为 Google Identity Platform 多租户启用“使用 Google 登录”?
- python - 清除内部变量以供对象类重用
- postman - POSTMAN 在身份验证中不喜欢用户名中的撇号