Поскольку вы используете ASP.NET MVC, ваши маршруты зависят от ваших контроллеров.Тогда вы можете представить себе ControllerA, использующий DatabaseA, и ControllerB, использующий DatabaseB.
Чтобы использовать несколько соединений с базой данных, вам нужна строка соединения для каждого из них.
Я бы использовал следующие фрагменты кодавнедрить экземпляры DbContextOptionsBuilder внутри Startup.ConfigureServices ()
var ContextAOptionsBuilder = new DbContextOptionsBuilder<ContextA>();
var ContextBOptionsBuilder = new DbContextOptionsBuilder<ContextB>();
Затем вы можете настроить ваши сборщики таким образом (в зависимости от ваших параметров)
ContextAOptionsBuilder.UseSqlServer(Configuration.GetConnectionString("ContextAConnectionString"), builder =>
{
builder.EnableRetryOnFailure(5, TimeSpan.FromSeconds(30), null);
});
ContextAOptionsBuilder.EnableSensitiveDataLogging();
Затем вы можете внедрить их какпо-отдельности:
services.AddSingleton(typeof(DbContextOptionsBuilder<ContextA>),ContextAOptionsBuilder);
Вы можете использовать BaseController, параметры конструктора которого могут получить доступ к сервисам следующим образом:
public BaseController(IConfiguration configuration, IMemoryCache memoryCache,
IHttpContextAccessor contextAccessor,
DbContextOptionsBuilder<ContextA> ContextAOptionsBuilder,
DbContextOptionsBuilder<ContextB> ContextBOptionsBuilder){}
Конечно, ControllerA и ControllerB являются наследниками классов BaseController,Вы можете получить доступ к нужному сборщику довольно просто.
public ControllerA(IConfiguration configuration,
IMemoryCache cache,
IHttpContextAccessor contextAccessor,
DbContextOptionsBuilder<ContextA> ContextAOptionsBuilder,
DbContextOptionsBuilder<ContextB> ContextBOptionsBuilder)
:base(configuration, cache, contextAccessor, ContextAOptionsBuilder,ContextBOptionsBuilder)
{
//Create your DbContext using the builder
}
Таким образом, вы можете использовать одну, другую или обе базы данных для построения вашего контекста
Более простым способом было бы внедрение вашего файла конфигурациии создание вашего контекста из его содержания, но комментарий Ппумкина предположил, что этоплохая идея сделать это на уровне контроллера.
Это решение работает для меня в приложении ASP.NET Core MVC, я все еще изучаю среду, но, возможно, мой ответ дал вам точность относительно нескольких DbContexts.