asp. net ядро, как изменить строку подключения во время выполнения из структуры объекта (после входа в систему) - PullRequest
0 голосов
/ 31 января 2020

У меня есть веб-приложение. NET Core 3.0. Я хотел бы изменить строку подключения во время выполнения после успешного входа в систему.

Ответы [ 2 ]

0 голосов
/ 03 февраля 2020

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. Инициализировать DbContextFactory при запуске Configure

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
}
0 голосов
/ 03 февраля 2020

Пусть, скажем, дополнительная работа, но как я ее называю, как только я успешно войду в систему, потому что все это делается при запуске?

Private void login(){
var status = login () ;
If (status){
DbContext.ConnectionString=newValue} 

Пожалуйста, совет. Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...