我正在构建一个系统,每个客户都有自己的数据库。 当客户登录时,我将使用用户电子邮件地址的域名来决定应使用什么连接字符串。
今天,连接字符串在startup.cs 文件中设置,但这不起作用。
我的问题是这样的: 在 EF Core 中实现基于规则的连接字符串选择的最佳方法是什么?
用户登录后,该用户应在其整个 session 期间使用相同的连接字符串。
最佳答案
将连接字符串存储在配置文件中,在我的例子中,我使用 appsettings.json
文件。
var builder = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();
var connectionString = builder["Data:DefaultConnection:ConnectionString"];
var optionsBuilder = new DbContextOptionsBuilder();
optionsBuilder.UseSqlServer(connectionString);
var context = new DataContext(optionsBuilder.Options);
和DataContext
类:
public class DataContext: DbContext
{
public DataContext(DbContextOptions options) : base(options)
{
}
}
你也可以通过依赖注入(inject)来做到这一点。对于此示例,我使用 Autofac
:
创建ConnectionString
类:
public class ConnectionStringDto
{
public string ConnectionString { get; set; }
}
Autofac
配置:
var configBuilder = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();
var connectionString = new ConnectionStringDto { ConnectionString = configBuilder ["Data:DefaultConnection:ConnectionString"]; };
var containerBuilder = new ContainerBuilder();
containerBuilder.RegisterInstance(connectionStringDto).AsSelf().SingleInstance();
containerBuilder.RegisterType<DataContext>().AsSelf().InstancePerLifetimeScope();
和DataContext
类:
public class DataContext : DbContext
{
private readonly ConnectionStringDto _connectionString;
public DataContext(ConnectionStringDto connectionString)
{
_connectionString = connectionString;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
base.OnConfiguring(optionsBuilder);
optionsBuilder.UseSqlServer(_connectionString.ConnectionString);
}
.
.
.
关于c# - 如何在 EF7 Core 中运行时更改连接字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36978087/