Как: добавить специфичные для провайдера опции DbContext в контейнер сервисов на основе конфигурации среды - PullRequest
0 голосов
/ 13 июня 2019

Я хочу настроить таргетинг на конкретного поставщика DbContext в зависимости от конфигурации среды.(т.е. appsettings.sqlserver.dev.json, appsettings.oracle.dev.json, appsettings.sqlserver.prod.json, appsettings.oracle.prod.json и т. д. ...)

Решение, приведенное ниже, работает, ноэто похоже на взлом.Кроме того, EF, похоже, игнорирует соглашение о файле конфигурации среды, поэтому вам нужно будет поддерживать файл appsettings.json по умолчанию для команд EF.(add -igration, remove-migratin, update-database и т.д ...)

Существуют ли какие-либо настройки среды провайдера, которые можно использовать для достижения этой цели?

Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    string dbProvider = Configuration["Database:Context:Provider"];            
    string dbConnectionString = Configuration["Database:Context:ConnectionString"];

    services.AddDbContext<DatabaseContext>(options =>
    {
        if (dbProvider == "SqlServer")
        {
            options.UseSqlServer(dbConnectionString, b => b.MigrationsAssembly("Eagle.Core.Web.Api"));
        }
        else if (dbProvider == "Oracle")
        {
            options.UseOracle(dbConnectionString, b => b.MigrationsAssembly("Eagle.Core.Web.Api"));
        }
            options.EnableSensitiveDataLogging(true);
    });            

    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
...