Как я могу переключить поставщика базы данных, используемого EF Core, в зависимости от конфигурации? - PullRequest
0 голосов
/ 01 апреля 2020

EF Core поддерживает множество различных провайдеров , и я могу настроить их в Startup.cs, указав провайдера. Например, если я хочу использовать SQL Сервер, я могу использовать:

services.AddDbContext<SomeContext>(options => {
    options.UseSqlServer(Configuration.GetConnectionString("SomeDatabase"));
});

Но поставщик БД (SQL Сервер), похоже, здесь жестко запрограммирован. Чего я хочу добиться, так это установить поставщика БД на основе конфигурации, чтобы я мог переключать поставщика БД на основе конфигурации.

Есть ли способ переключения провайдера на основе конфигурации?

Ответы [ 2 ]

2 голосов
/ 01 апреля 2020

Можно, но это немного вручную. Отсюда у вас есть доступ к конфигурации, поэтому вы можете просто сделать что-то вроде:

services.AddDbContext<SomeContext>(options => Configuration["DatabaseProvider"] switch
{
  "someprovider" => options.UseSomeOtherProvider(...),
  // etc.
  _ => options.UseSqlServer(Configuration.GetConnectionString("SomeDatabase"))
});

Я использую здесь более новый синтаксис выражений переключателей. Последняя строка с _ подразумевает значение по умолчанию, когда нет явного соответствия.

1 голос
/ 01 апреля 2020

Не совсем. Вы должны сделать свой собственный фабричный метод. Видите, это не просто настройка - это также загрузка классов. В web.config больше нет механизма регистрации для этого.

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