c# - 如何在 EF7 Core 中运行时更改连接字符串?

标签 c# entity-framework-core

我正在构建一个系统,每个客户都有自己的数据库。 当客户登录时,我将使用用户电子邮件地址的域名来决定应使用什么连接字符串。

今天,连接字符串在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/

相关文章:

c# - EF核心: conditional query inside Include method

c# - 如何确保在使用键盘快捷键时只执行一个 KeyBinding 命令?

c# - File.Exists 在 File.Delete 之后返回 true

c# - 定义 "dynamic"枚举

c# - EF Core - EntityTypeBuilder 一对多关系?

c# - System.InvalidCastException : Column 'modifiedbyuserid' is null

c# - 过滤导航属性 EF core

c# - 尝试实现 LeftJoin 扩展方法以与 EF Core 2.0 一起使用

c# - Nest:你应该如何处理 C# 中的亮点

c# - 设置环境变量以在运行时使用 C# 查找 dll