我正在建立一个系统,每个客户将拥有自己的数据库。当客户登录时,我将使用用户电子邮件地址的域名来决定应使用的连接字符串。
如今,已在startup.cs文件中设置了连接字符串,但这将无法正常工作。
我的问题是:在EF Core中实现基于规则的连接字符串选择的最佳方法是什么?
用户登录后,该用户应在整个会话期间使用相同的连接字符串。
将您的连接字符串存储在配置文件中,以我为例,我正在使用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)
{
}
}
而且您也可以通过依赖注入来做到这一点。对于此示例,我正在使用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);
}
.
.
.
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句