実行時にEF7コアで接続文字列を変更するにはどうすればよいですか?

c# entity-framework-core

質問

私は各顧客がそれ自身のデータベースを持つシステムを構築しています。顧客がログオンすると、ユーザーの電子メールアドレスのドメイン名を使用して、使用すべき接続文字列を決定します。

今日、接続文字列はstartup.csファイルに設定されていますが、これは動作しません。

私の質問はこれです:どのようなルールを実装する最善の方法は、EFコアでの接続文字列の選択ですか?

ユーザーがログインした後、そのユーザーはセッション全体で同じConnection文字列を使用する必要があります。

受け入れられた回答

設定ファイルに接続文字列をappsettings.jsonます。私の場合、 appsettings.jsonファイルを使用して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を使用していAutofac

create 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);
    }
    .
    .
    .


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ