Установите строку подключения в методе OnConfiguring
, равном DbContext
, вызвав UseSqlServer
или любой другой вашей базой данных. В этом методе вам нужна ссылка на какой-либо сервис, который предоставит пользовательское соединение c. Для этого, IMO, лучший способ - внедрить IHttpContextAccessor
через класс DbContext
, а внутри OnConfiguring
использовать его для получения HttpContext
и всех зарегистрированных сервисов. Вы не должны забывать регистрироваться IHttpContextAccessor
по звонку на AddHttpContextAccessor
. Пример кода:
//MyContext
public class MyContext : DbContext
{
public MyContext(DbContextOptions options, IHttpContextAccessor httpContextAccessor) : base(options)
{
this.HttpContextAccessor = httpContextAccessor;
}
protected IHttpContextAccessor HttpContextAccessor { get; }
protected override void OnConfiguring(DbContextOptionsBuilder builder)
{
var context = this.HttpContextAccessor.HttpContext;
var userService = context.RequestServices<IUserService>();
var user = context.User.Identity.Name;
var connectionString = userService.GetConnectionString(user);
builder.UseSqlServer(connectionString);
base.OnConfiguring(builder);
}
}
//Startup.ConfigureServices
services.AddHttpContextAccessor();
services.AddDbContext<MyContext>();
Обратите внимание, что IUserService
- это просто какая-то служба, которую вы должны реализовать, которая будет возвращать строку подключения для данного пользователя.